提交 83f70811 编写于 作者: wafwerar's avatar wafwerar

[TD-6169]<fix>: windows dll client can not quit.

上级 95667d91
...@@ -71,6 +71,7 @@ static pthread_once_t cacheThreadInit = PTHREAD_ONCE_INIT; ...@@ -71,6 +71,7 @@ static pthread_once_t cacheThreadInit = PTHREAD_ONCE_INIT;
static pthread_mutex_t guard = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t guard = PTHREAD_MUTEX_INITIALIZER;
static SArray* pCacheArrayList = NULL; static SArray* pCacheArrayList = NULL;
static bool stopRefreshWorker = false; static bool stopRefreshWorker = false;
static bool refreshWorkerStopped = false;
static void doInitRefreshThread(void) { static void doInitRefreshThread(void) {
pCacheArrayList = taosArrayInit(4, POINTER_BYTES); pCacheArrayList = taosArrayInit(4, POINTER_BYTES);
...@@ -538,6 +539,8 @@ void taosCacheCleanup(SCacheObj *pCacheObj) { ...@@ -538,6 +539,8 @@ void taosCacheCleanup(SCacheObj *pCacheObj) {
// wait for the refresh thread quit before destroying the cache object. // wait for the refresh thread quit before destroying the cache object.
while(atomic_load_8(&pCacheObj->deleting) != 0) { while(atomic_load_8(&pCacheObj->deleting) != 0) {
if (refreshWorkerUnexpectedStopped) return;
if (refreshWorkerNormalStopped) break;
taosMsleep(50); taosMsleep(50);
} }
...@@ -676,6 +679,12 @@ static void doCacheRefresh(SCacheObj* pCacheObj, int64_t time, __cache_free_fn_t ...@@ -676,6 +679,12 @@ static void doCacheRefresh(SCacheObj* pCacheObj, int64_t time, __cache_free_fn_t
taosHashCondTraverse(pCacheObj->pHashTable, travHashTableFn, &sup); taosHashCondTraverse(pCacheObj->pHashTable, travHashTableFn, &sup);
} }
void taosCacheRefreshWorkerUnexpectedStopped(void) {
if(!refreshWorkerNormalStopped) {
refreshWorkerUnexpectedStopped=true;
}
}
void* taosCacheTimedRefresh(void *handle) { void* taosCacheTimedRefresh(void *handle) {
assert(pCacheArrayList != NULL); assert(pCacheArrayList != NULL);
uDebug("cache refresh thread starts"); uDebug("cache refresh thread starts");
...@@ -685,6 +694,8 @@ void* taosCacheTimedRefresh(void *handle) { ...@@ -685,6 +694,8 @@ void* taosCacheTimedRefresh(void *handle) {
const int32_t SLEEP_DURATION = 500; //500 ms const int32_t SLEEP_DURATION = 500; //500 ms
int64_t count = 0; int64_t count = 0;
atexit(taosCacheRefreshWorkerUnexpectedStopped);
while(1) { while(1) {
taosMsleep(SLEEP_DURATION); taosMsleep(SLEEP_DURATION);
if (stopRefreshWorker) { if (stopRefreshWorker) {
...@@ -748,6 +759,7 @@ void* taosCacheTimedRefresh(void *handle) { ...@@ -748,6 +759,7 @@ void* taosCacheTimedRefresh(void *handle) {
pCacheArrayList = NULL; pCacheArrayList = NULL;
pthread_mutex_destroy(&guard); pthread_mutex_destroy(&guard);
refreshWorkerNormalStopped=true;
uDebug("cache refresh thread quits"); uDebug("cache refresh thread quits");
return NULL; return NULL;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册