@cryptotaxi247 / netdata-1 / commits / da205b61b

Improve SQLite library shutdown handling and initialization state (#20559)

Stelios Fragkakis committed Jun 26, 2025 at 11:01 UTC da205b61b8d1f9afd41aee813cb1c4cc392c5545
1 file changed +10 -6
src/database/sqlite/sqlite_functions.c
+10 -6
@@ -20,7 +20,7 @@ long long def_journal_size_limit = 16777216;
20
21 SPINLOCK sqlite_spinlock = SPINLOCK_INITIALIZER;
22
23 -bool sqlite_online;
23 +bool sqlite_library_initialized;
24
25 SQLITE_API int sqlite3_exec_monitored(
26 sqlite3 *db, /* An open database */
@@ -429,6 +429,8 @@ extern sqlite3 *db_context_meta;
429
430 void sqlite_close_databases(void)
431 {
432 + spinlock_lock(&sqlite_spinlock);
433 +
434 // In case we have statements in the main thread
435 finalize_self_prepared_sql_statements();
436
@@ -436,12 +438,9 @@ void sqlite_close_databases(void)
438 // to do it properly
439 finalize_all_prepared_sql_statements();
440
439 - spinlock_lock(&sqlite_spinlock);
440 - sqlite_online = false;
441 - spinlock_unlock(&sqlite_spinlock);
442 -
441 sql_close_database(db_context_meta, "CONTEXT");
442 sql_close_database(db_meta, "METADATA");
443 + spinlock_unlock(&sqlite_spinlock);
444 }
445
446 uint64_t get_total_database_space(void)
@@ -485,7 +484,7 @@ int sqlite_library_init(void)
484 nd_log_daemon(
485 NDLP_INFO, "SQLITE: heap memory hard limit %s, soft limit %s", sqlite_hard_limit_mb, sqlite_soft_limit_mb);
486 }
488 - sqlite_online = true;
487 + sqlite_library_initialized = true;
488 spinlock_unlock(&sqlite_spinlock);
489
490 return (SQLITE_OK != rc);
@@ -506,6 +505,11 @@ void sqlite_library_shutdown(void)
505 } while (bytes);
506 #endif
507 spinlock_lock(&sqlite_spinlock);
508 + if (!sqlite_library_initialized) {
509 + spinlock_unlock(&sqlite_spinlock);
510 + return;
511 + }
512 + sqlite_library_initialized = false;
513 (void) sqlite3_shutdown();
514 spinlock_unlock(&sqlite_spinlock);
515 }