From 8ce6f55a9d4df6dcdd900e357b125f8e218fd670 Mon Sep 17 00:00:00 2001 From: slzhou Date: Fri, 22 Apr 2022 16:52:50 +0800 Subject: [PATCH] refine stop processing --- source/dnode/mgmt/implement/src/dmHandle.c | 12 +++++------- source/dnode/mgmt/interface/inc/dmDef.h | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/source/dnode/mgmt/implement/src/dmHandle.c b/source/dnode/mgmt/implement/src/dmHandle.c index c4eba53a34..8ba12513db 100644 --- a/source/dnode/mgmt/implement/src/dmHandle.c +++ b/source/dnode/mgmt/implement/src/dmHandle.c @@ -221,8 +221,8 @@ static int32_t dmSpawnUdfd(SDnode *pDnode); void dmUdfdExit(uv_process_t *process, int64_t exitStatus, int termSignal) { dInfo("udfd process exited with status %" PRId64 ", signal %d", exitStatus, termSignal); SDnode *pDnode = process->data; - if (exitStatus == 0 && termSignal == 0) { - dInfo("udfd process exit due to SIGINT"); + if (exitStatus == 0 && termSignal == 0 || atomic_load_32(&pDnode->udfdData.stopCalled)) { + dInfo("udfd process exit due to SIGINT or dnode-mgmt called stop"); } else { dInfo("udfd process restart"); dmSpawnUdfd(pDnode); @@ -327,14 +327,12 @@ static int32_t dmStopUdfd(SDnode *pDnode) { dInfo("dnode-mgmt to stop udfd. need cleanup: %d, spawn err: %d", pDnode->udfdData.needCleanUp, pDnode->udfdData.spawnErr); SUdfdData *pData = &pDnode->udfdData; - if (!pData->needCleanUp) { + if (!pData->needCleanUp || atomic_load_32(&pData->stopCalled)) { return 0; } - + atomic_store_32(&pData->stopCalled, 1); + pData->needCleanUp = false; uv_barrier_destroy(&pData->barrier); - if (pData->spawnErr == 0) { - uv_process_kill(&pData->process, SIGINT); - } uv_async_send(&pData->stopAsync); uv_thread_join(&pData->thread); diff --git a/source/dnode/mgmt/interface/inc/dmDef.h b/source/dnode/mgmt/interface/inc/dmDef.h index dd31faf1b7..087892e741 100644 --- a/source/dnode/mgmt/interface/inc/dmDef.h +++ b/source/dnode/mgmt/interface/inc/dmDef.h @@ -153,6 +153,7 @@ typedef struct SUdfdData { int spawnErr; uv_pipe_t ctrlPipe; uv_async_t stopAsync; + int32_t stopCalled; } SUdfdData; typedef struct SDnode {