diff --git a/src/client/src/tscSystem.c b/src/client/src/tscSystem.c index c04765b0651f59066dd5897f2eaf0924b7113a21..ad29b5866007429c56c0d2bdc2d7d768d4ab8e79 100644 --- a/src/client/src/tscSystem.c +++ b/src/client/src/tscSystem.c @@ -199,7 +199,9 @@ void taos_init_imp(void) { // In the APIs of other program language, taos_cleanup is not available yet. // So, to make sure taos_cleanup will be invoked to clean up the allocated resource to suppress the valgrind warning. +#if !defined(TD_WINDOWS) atexit(taos_cleanup); +#endif tscDebug("client is initialized successfully"); } diff --git a/src/util/src/tcache.c b/src/util/src/tcache.c index be5584d182392cd622fc923becec311680affc21..dc1f9617253c9c56b1e2b498f806298448526435 100644 --- a/src/util/src/tcache.c +++ b/src/util/src/tcache.c @@ -538,8 +538,8 @@ void taosCacheCleanup(SCacheObj *pCacheObj) { // wait for the refresh thread quit before destroying the cache object. // But in the dll, the child thread will be killed before atexit takes effect.So here we only wait for one second. - // while(atomic_load_8(&pCacheObj->deleting)) { - for (int i = 0; i < 60&&atomic_load_8(&pCacheObj->deleting) != 0; i++) { + while(atomic_load_8(&pCacheObj->deleting)) { + // for (int i = 0; i < 60&&atomic_load_8(&pCacheObj->deleting) != 0; i++) { taosMsleep(50); } @@ -721,6 +721,8 @@ void* taosCacheTimedRefresh(void *handle) { continue; } + pthread_mutex_unlock(&guard); + if ((count % pCacheObj->checkTick) != 0) { continue; } @@ -740,8 +742,6 @@ void* taosCacheTimedRefresh(void *handle) { } taosTrashcanEmpty(pCacheObj, false); - - pthread_mutex_unlock(&guard); } }