Skip to content

Commit 49980d4

Browse files
saukacodebot
authored andcommitted
gnb: fix static initialization order problem
1 parent dabcecf commit 49980d4

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

apps/gnb/gnb_appconfig_cli11_schema.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,10 +1920,10 @@ static void configure_cli11_hal_args(CLI::App& app, optional<hal_appconfig>& con
19201920
static error_type<std::string> is_valid_cpu_index(unsigned cpu_idx)
19211921
{
19221922
os_sched_affinity_bitmask one_cpu_mask(cpu_idx);
1923-
if (not one_cpu_mask.subtract(os_sched_affinity_bitmask::available_cpus).empty()) {
1923+
if (not one_cpu_mask.subtract(os_sched_affinity_bitmask::available_cpus()).empty()) {
19241924
return fmt::format("Invalid CPU core selected '{}'. Valid CPU ids: {}",
19251925
cpu_idx,
1926-
os_sched_affinity_bitmask::available_cpus.get_cpu_ids());
1926+
os_sched_affinity_bitmask::available_cpus().get_cpu_ids());
19271927
}
19281928
return default_success_t();
19291929
}

include/srsran/support/unique_thread.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,6 @@ struct os_sched_affinity_bitmask {
100100
public:
101101
static constexpr size_t MAX_CPUS = 1024;
102102

103-
/// Bitmap of the total CPUs available to the application.
104-
const static os_sched_affinity_bitmask available_cpus;
105-
106103
os_sched_affinity_bitmask() : cpu_bitset(get_host_max_cpu_id() + 1) {}
107104

108105
explicit os_sched_affinity_bitmask(size_t cpu_idx) : cpu_bitset(get_host_max_cpu_id() + 1) { set(cpu_idx); }
@@ -113,6 +110,9 @@ struct os_sched_affinity_bitmask {
113110

114111
void set(size_t cpu_idx) { cpu_bitset.set(cpu_idx); }
115112

113+
/// Returns a bitmap of the CPUs available to the application.
114+
static const os_sched_affinity_bitmask& available_cpus();
115+
116116
/// \brief Finds, within a range of CPU indexes, the lowest CPU enabled.
117117
/// \param[in] start_cpu_index Starting CPU index for the search.
118118
/// \param[in] end_cpu_index End CPU index for the search.

lib/support/unique_thread.cpp

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ static bool thread_set_param(pthread_t t, os_thread_realtime_priority prio)
8888

8989
static bool thread_set_affinity(pthread_t t, const os_sched_affinity_bitmask& bitmap, const std::string& name)
9090
{
91-
auto invalid_ids = bitmap.subtract(os_sched_affinity_bitmask::available_cpus);
91+
auto invalid_ids = bitmap.subtract(os_sched_affinity_bitmask::available_cpus());
9292
if (invalid_ids.size() > 0) {
9393
fmt::print(
9494
"Warning: The CPU affinity of thread \"{}\" contains the following invalid CPU ids: {}\n", name, invalid_ids);
@@ -170,15 +170,19 @@ static void print_thread_priority(pthread_t t, const char* tname, std::thread::i
170170
fmt::print("Thread [{}:{}]: Sched policy is \"{}\". Priority is {}.\n", tname, tid, p, param.sched_priority);
171171
}
172172

173-
const os_sched_affinity_bitmask os_sched_affinity_bitmask::available_cpus = []() {
174-
os_sched_affinity_bitmask bitmask;
175-
for (size_t i = 0; i < bitmask.size(); ++i) {
176-
if (CPU_ISSET(i, &host_desc.cpuset)) {
177-
bitmask.cpu_bitset.set(i);
173+
const os_sched_affinity_bitmask& os_sched_affinity_bitmask::available_cpus()
174+
{
175+
static os_sched_affinity_bitmask available_cpus_mask = []() {
176+
os_sched_affinity_bitmask bitmask;
177+
for (size_t i = 0; i < bitmask.size(); ++i) {
178+
if (CPU_ISSET(i, &host_desc.cpuset)) {
179+
bitmask.cpu_bitset.set(i);
180+
}
178181
}
179-
}
180-
return bitmask;
181-
}();
182+
return bitmask;
183+
}();
184+
return available_cpus_mask;
185+
}
182186

183187
static_vector<size_t, os_sched_affinity_bitmask::MAX_CPUS>
184188
os_sched_affinity_bitmask::subtract(const os_sched_affinity_bitmask& rhs) const

0 commit comments

Comments
 (0)