Skip to content

Commit 8ab6382

Browse files
committed
fixes segfault [43acb96e678a66ef]: avoid access to freed memory in TpoolRelease
1 parent bcfa337 commit 8ab6382

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

generic/threadPoolCmd.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -678,7 +678,9 @@ TpoolCancelObjCmd(
678678
tpoolPtr->workTail = rPtr->prevPtr;
679679
}
680680
SetResult(NULL, rPtr); /* Just to free the result */
681-
ckfree(rPtr->script);
681+
if (rPtr->script) {
682+
ckfree(rPtr->script);
683+
}
682684
ckfree((char*)rPtr);
683685
Tcl_ListObjAppendElement(interp, doneList, wObjv[ii]);
684686
break;
@@ -1727,8 +1729,11 @@ TpoolRelease(
17271729
* Cleanup jobs posted but never completed.
17281730
*/
17291731

1730-
for (rPtr = tpoolPtr->workHead; rPtr; rPtr = rPtr->nextPtr) {
1731-
ckfree(rPtr->script);
1732+
for (rPtr = tpoolPtr->workHead; rPtr; rPtr = tpoolPtr->workHead) {
1733+
tpoolPtr->workHead = rPtr->nextPtr;
1734+
if (rPtr->script) {
1735+
ckfree(rPtr->script);
1736+
}
17321737
ckfree((char*)rPtr);
17331738
}
17341739
Tcl_MutexFinalize(&tpoolPtr->mutex);

0 commit comments

Comments
 (0)