diff --git a/src/database/database-thread.c b/src/database/database-thread.c index efdd1bd6..81e80484 100644 --- a/src/database/database-thread.c +++ b/src/database/database-thread.c @@ -78,7 +78,6 @@ static bool analyze_database(sqlite3 *db) } #define DBOPEN_OR_AGAIN() { if(!db) db = dbopen(false, false); if(!db) { thread_sleepms(DB, 5000); continue; } } -#define BREAK_IF_KILLED() { if(killed) break; } #define DBCLOSE_OR_BREAK() { dbclose(&db); BREAK_IF_KILLED(); } void *DB_thread(void *val) diff --git a/src/enums.h b/src/enums.h index 67dd1fbc..d8977f83 100644 --- a/src/enums.h +++ b/src/enums.h @@ -252,6 +252,7 @@ enum thread_types { DNSclient, CONF_READER, TIMER, + NTP, THREADS_MAX } __attribute__ ((packed)); diff --git a/src/ntp/client.c b/src/ntp/client.c index 995dd26f..1c3c031b 100644 --- a/src/ntp/client.c +++ b/src/ntp/client.c @@ -31,7 +31,8 @@ #include "config/config.h" // adjtime() #include - +// thread_names[] +#include "signals.h" struct ntp_sync { uint64_t org; @@ -464,19 +465,27 @@ bool ntp_client(const char *server, const bool settime) static void *ntp_client_thread(void *arg) { // Set thread name + thread_names[NTP] = "ntp-client"; + thread_running[NTP] = true; + prctl(PR_SET_NAME, thread_names[DB], 0, 0, 0); pthread_setname_np(pthread_self(), "NTP sync"); // Run NTP client - while(true) + while(!killed) { // Run NTP client - if(ntp_client(config.ntp.sync.server.v.s, true)) - break; + ntp_client(config.ntp.sync.server.v.s, true); + + // Intermediate cancellation-point + BREAK_IF_KILLED(); // Sleep before retrying - sleep(config.ntp.sync.interval.v.ui); + thread_sleepms(NTP, 1000 * config.ntp.sync.interval.v.ui); } + log_info("Terminating NTP thread"); + thread_running[NTP] = false; + return NULL; } diff --git a/src/signals.h b/src/signals.h index 4a08e4b9..f52fb2d9 100644 --- a/src/signals.h +++ b/src/signals.h @@ -32,4 +32,6 @@ extern volatile sig_atomic_t thread_cancellable[THREADS_MAX]; extern volatile sig_atomic_t thread_running[THREADS_MAX]; extern const char *thread_names[THREADS_MAX]; +#define BREAK_IF_KILLED() { if(killed) break; } + #endif //SIGNALS_H