fix memory error

This commit is contained in:
slzhou 2022-04-21 16:00:34 +08:00
parent 81a2f3b78c
commit 42b2b4a95c
1 changed files with 12 additions and 2 deletions

View File

@ -270,6 +270,12 @@ static int32_t dmSpawnUdfd(SDnode *pDnode) {
return err; return err;
} }
static void dmUdfdCloseWalkCb(uv_handle_t* handle, void* arg) {
if (!uv_is_closing(handle)) {
uv_close(handle, NULL);
}
}
void dmWatchUdfd(void *args) { void dmWatchUdfd(void *args) {
SDnode *pDnode = args; SDnode *pDnode = args;
SUdfdData *pData = &pDnode->udfdData; SUdfdData *pData = &pDnode->udfdData;
@ -277,10 +283,13 @@ void dmWatchUdfd(void *args) {
int32_t err = dmSpawnUdfd(pDnode); int32_t err = dmSpawnUdfd(pDnode);
atomic_store_32(&pData->spawnErr, err); atomic_store_32(&pData->spawnErr, err);
uv_barrier_wait(&pData->barrier); uv_barrier_wait(&pData->barrier);
if (pData->spawnErr == 0) { uv_run(&pData->loop, UV_RUN_DEFAULT);
err = uv_loop_close(&pData->loop);
while (err == UV_EBUSY) {
uv_walk(&pData->loop, dmUdfdCloseWalkCb, NULL);
uv_run(&pData->loop, UV_RUN_DEFAULT); uv_run(&pData->loop, UV_RUN_DEFAULT);
err = uv_loop_close(&pData->loop);
} }
uv_loop_close(&pData->loop);
return; return;
} }
@ -312,6 +321,7 @@ int32_t dmStopUdfd(SDnode *pDnode) {
if (pData->spawnErr == 0) { if (pData->spawnErr == 0) {
uv_process_kill(&pData->process, SIGINT); uv_process_kill(&pData->process, SIGINT);
} }
uv_stop(&pData->loop);
uv_thread_join(&pData->thread); uv_thread_join(&pData->thread);
atomic_store_8(&pData->stopping, 0); atomic_store_8(&pData->stopping, 0);