Fix initialization handling in `GetHardwareInfo` function (#21885)
- Add checks for uninitialized `cpus` and `cpus_lock` in `netdata_loop_cpu_chart` to prevent potential issues. - Introduce `init_failed` flag to handle initialization failures gracefully and prevent redundant attempts.
Stelios Fragkakis committed
Mar 4, 2026 at 15:47 UTC
1024b6995a93c76217bf66f8730990b230c331a2
1 file changed
+10
-1
src/collectors/windows.plugin/GetHardwareInfo.c
+10
-1
@@ -366,6 +366,9 @@ static RRDSET *netdata_publish_cpu_chart(int update_every)
366
367
static void netdata_loop_cpu_chart(int update_every)
368
{
369
+ if (unlikely(!cpus_lock_initialized || !cpus))
370
+ return;
371
+
372
RRDSET *chart = netdata_publish_cpu_chart(update_every);
373
374
EnterCriticalSection(&cpus_lock);
@@ -391,11 +394,17 @@ static void netdata_loop_cpu_chart(int update_every)
394
int do_GetHardwareInfo(int update_every, usec_t dt __maybe_unused)
395
{
396
static bool initialized = false;
397
+ static bool init_failed = false;
398
+
399
+ if (unlikely(init_failed))
400
+ return -1;
401
+
402
if (unlikely(!initialized)) {
395
- initialized = true;
403
if (initialize()) {
404
+ init_failed = true;
405
return -1;
406
}
407
+ initialized = true;
408
}
409
410
netdata_loop_cpu_chart(update_every);