未验证 提交 4c05a2ed 编写于 作者: H Hui Li 提交者: GitHub

Merge pull request #20609 from taosdata/fix/TS-2823-2.6

fix: check begin_thread return error
...@@ -163,6 +163,7 @@ void dnodeFreeVWriteQueue(void *pWqueue) { ...@@ -163,6 +163,7 @@ void dnodeFreeVWriteQueue(void *pWqueue) {
} }
void* waitingResultThread(void* param) { void* waitingResultThread(void* param) {
setThreadName("waitDeleteResult");
SVWriteMsg* pWrite = (SVWriteMsg* )param; SVWriteMsg* pWrite = (SVWriteMsg* )param;
// wait request deal finished // wait request deal finished
dInfo(":SDEL pVnode:%p start wait commit pWrite=%p", pWrite->pVnode, pWrite); dInfo(":SDEL pVnode:%p start wait commit pWrite=%p", pWrite->pVnode, pWrite);
...@@ -216,8 +217,15 @@ void dnodeSendRpcVWriteRsp(void *pVnode, void *wparam, int32_t code) { ...@@ -216,8 +217,15 @@ void dnodeSendRpcVWriteRsp(void *pVnode, void *wparam, int32_t code) {
// first add to list // first add to list
vnodeAddWait(pVnode, NULL, pWrite->rspRet.psem, pWrite); vnodeAddWait(pVnode, NULL, pWrite->rspRet.psem, pWrite);
pthread_t* thread = taosCreateThread(waitingResultThread, pWrite); pthread_t* thread = taosCreateThread(waitingResultThread, pWrite);
// set thread if(thread == NULL) {
vnodeSetWait(pVnode, thread, pWrite); dError(":SDEL pVnode:%p pWrite=%p create thread error.", pWrite->pVnode, pWrite);
rpcSendResponse(&rpcRsp);
vnodeRemoveWait(pWrite->pVnode, pWrite);
vnodeFreeFromWQueue(pVnode, pWrite);
} else {
// set thread
vnodeSetWait(pVnode, thread, pWrite);
}
} }
} }
} }
......
...@@ -31,6 +31,7 @@ pthread_t* taosCreateThread( void *(*__start_routine) (void *), void* param) { ...@@ -31,6 +31,7 @@ pthread_t* taosCreateThread( void *(*__start_routine) (void *), void* param) {
pthread_attr_destroy(&thattr); pthread_attr_destroy(&thattr);
if (ret != 0) { if (ret != 0) {
uError("failed to create thread code=%d since %s", ret, strerror(ret));
free(pthread); free(pthread);
return NULL; return NULL;
} }
......
...@@ -686,6 +686,7 @@ void vnodeRemoveWait(void* vparam, void* param) { ...@@ -686,6 +686,7 @@ void vnodeRemoveWait(void* vparam, void* param) {
SVnodeObj* pVnode = (SVnodeObj* )vparam; SVnodeObj* pVnode = (SVnodeObj* )vparam;
SListIter iter = {0}; SListIter iter = {0};
vInfo("vgId:%d :SDEL enter remove-wait pWrite=%p list count=%d ", pVnode->vgId, param, listNEles(pVnode->waitThreads));
tsem_wait(&pVnode->semWait); tsem_wait(&pVnode->semWait);
tdListInitIter(pVnode->waitThreads, &iter, TD_LIST_FORWARD); tdListInitIter(pVnode->waitThreads, &iter, TD_LIST_FORWARD);
...@@ -697,15 +698,18 @@ void vnodeRemoveWait(void* vparam, void* param) { ...@@ -697,15 +698,18 @@ void vnodeRemoveWait(void* vparam, void* param) {
SWaitThread * pWaitThread = (SWaitThread *)pNode->data; SWaitThread * pWaitThread = (SWaitThread *)pNode->data;
if (pWaitThread->param == param) { if (pWaitThread->param == param) {
// found , free SWaitThread memeber // found , free SWaitThread memeber
free(pWaitThread->pthread); if (pWaitThread->pthread) {
free(pWaitThread->pthread);
}
tdListPopNode(pVnode->waitThreads, pNode); tdListPopNode(pVnode->waitThreads, pNode);
vDebug("vgId:%d :SDEL removed wait thread %p wait list count=%d ", pVnode->vgId, param, listNEles(pVnode->waitThreads)); vInfo("vgId:%d :SDEL deleted remove-wait pWrite=%p list count=%d ", pVnode->vgId, param, listNEles(pVnode->waitThreads));
// free pListNode self // free pListNode self
free(pNode); free(pNode);
break; break;
} }
} }
tsem_post(&pVnode->semWait); tsem_post(&pVnode->semWait);
vInfo("vgId:%d :SDEL end remove-wait pWrite=%p list count=%d ", pVnode->vgId, param, listNEles(pVnode->waitThreads));
} }
// get wait thread count // get wait thread count
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册