diff --git a/src/client/src/tscSql.c b/src/client/src/tscSql.c index 9ad38e33600bdc1c6fb10182ce25f5bd38e936ac..bb0d8005c2d7234b5a9dca1cc788239ece088965 100644 --- a/src/client/src/tscSql.c +++ b/src/client/src/tscSql.c @@ -284,16 +284,18 @@ void taos_close(TAOS *taos) { return; } - SSqlObj* pHb = (SSqlObj*)taosAcquireRef(tscObjRef, pObj->hbrid); - if (pHb != NULL) { - if (pHb->rpcRid > 0) { // wait for rsp from dnode - rpcCancelRequest(pHb->rpcRid); - pHb->rpcRid = -1; - } + if (RID_VALID(pObj->hbrid)) { + SSqlObj* pHb = (SSqlObj*)taosAcquireRef(tscObjRef, pObj->hbrid); + if (pHb != NULL) { + if (RID_VALID(pHb->rpcRid)) { // wait for rsp from dnode + rpcCancelRequest(pHb->rpcRid); + pHb->rpcRid = -1; + } - tscDebug("%p HB is freed", pHb); - taosReleaseRef(tscObjRef, pHb->self); - taos_free_result(pHb); + tscDebug("%p HB is freed", pHb); + taosReleaseRef(tscObjRef, pHb->self); + taos_free_result(pHb); + } } tscDebug("%p all sqlObj are freed, free tscObj and close dnodeConn:%p", pObj, pObj->pDnodeConn); diff --git a/src/util/inc/tref.h b/src/util/inc/tref.h index cd5092f30a290c51de49e38b0226bbed637dc0e6..085c10c55198fc92bfacb0628c38f05da508bfb9 100644 --- a/src/util/inc/tref.h +++ b/src/util/inc/tref.h @@ -52,6 +52,8 @@ void *taosIterateRef(int rsetId, int64_t rid); // return the number of references in system int taosListRef(); +#define RID_VALID(x) ((x) > 0) + /* sample code to iterate the refs void demoIterateRefs(int rsetId) {