提交 70df5381 编写于 作者: G Ganlin Zhao

fix(query): fix pthread_create memleak in shell engine

TD-17791
上级 ca641a27
......@@ -95,6 +95,7 @@ typedef struct {
TAOS* conn;
TdThread pid;
tsem_t cancelSem;
bool exit;
#ifdef WEBSOCKET
WS_TAOS* ws_conn;
bool stop_query;
......
......@@ -948,6 +948,10 @@ void shellCleanup(void *arg) { taosResetTerminalMode(); }
void *shellCancelHandler(void *arg) {
setThreadName("shellCancelHandler");
while (1) {
if (shell.exit == true) {
break;
}
if (tsem_wait(&shell.cancelSem) != 0) {
taosMsleep(10);
continue;
......@@ -961,7 +965,7 @@ void *shellCancelHandler(void *arg) {
taos_kill_query(shell.conn);
#ifdef WEBSOCKET
}
#endif
#endif
#ifdef WINDOWS
printf("\n%s", shell.info.promptHeader);
#endif
......@@ -1009,7 +1013,7 @@ int32_t shellExecute() {
if (shell.args.restful || shell.args.cloud) {
if (shell_conn_ws_server(1)) {
return -1;
}
}
} else {
#endif
if (shell.args.auth == NULL) {
......@@ -1043,7 +1047,7 @@ int32_t shellExecute() {
if (shell.args.restful || shell.args.cloud) {
ws_close(shell.ws_conn);
} else {
#endif
#endif
taos_close(shell.conn);
#ifdef WEBSOCKET
}
......@@ -1079,7 +1083,12 @@ int32_t shellExecute() {
taosThreadCreate(&shell.pid, NULL, shellThreadLoop, NULL);
taosThreadJoin(shell.pid, NULL);
taosThreadClear(&shell.pid);
if (shell.exit) {
tsem_post(&shell.cancelSem);
break;
}
}
taosThreadJoin(spid, NULL);
shellCleanupHistory();
return 0;
......
......@@ -157,6 +157,6 @@ void shellExit() {
taos_close(shell.conn);
shell.conn = NULL;
}
shell.exit = true;
taos_cleanup();
exit(EXIT_FAILURE);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册