diff --git a/src/dnode/src/dnodeSystem.c b/src/dnode/src/dnodeSystem.c index e4d1d102e0319706c723f2659b843791654b96a7..d41a2c6a8ae442f09b20c1dc55d06d5d5273cd88 100644 --- a/src/dnode/src/dnodeSystem.c +++ b/src/dnode/src/dnodeSystem.c @@ -19,6 +19,7 @@ #include "tconfig.h" #include "dnodeMain.h" +bool dnodeExit = false; static tsem_t exitSem; static void siguser1Handler(int32_t signum, void *sigInfo, void *context); static void siguser2Handler(int32_t signum, void *sigInfo, void *context); @@ -182,6 +183,8 @@ static void sigintHandler(int32_t signum, void *sigInfo, void *context) { syslog(LOG_INFO, "Shut down signal is %d", signum); syslog(LOG_INFO, "Shutting down TDengine service..."); + dnodeExit = true; + // inform main thread to exit tsem_post(&exitSem); #ifdef WINDOWS diff --git a/src/dnode/src/dnodeVnodes.c b/src/dnode/src/dnodeVnodes.c index 47ef92a6e0e7274e65db181590ca069736317224..981c150f1c8a523ae78749560545dd985af73eac 100644 --- a/src/dnode/src/dnodeVnodes.c +++ b/src/dnode/src/dnodeVnodes.c @@ -30,6 +30,7 @@ typedef struct { int32_t * vnodeList; } SOpenVnodeThread; +extern bool dnodeExit; extern void * tsDnodeTmr; static void * tsStatusTimer = NULL; static uint32_t tsRebootTime = 0; @@ -225,6 +226,11 @@ static void dnodeProcessStatusRsp(SRpcMsg *pMsg) { // warning: only for k8s! while (tsDnodeNopLoop) { + if (dnodeExit) { + dInfo("Break loop"); + return; + } + dInfo("Nop loop"); #ifdef WINDOWS Sleep(100);