summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2011-08-30 15:44:28 (GMT)
committerdgp <dgp@users.sourceforge.net>2011-08-30 15:44:28 (GMT)
commit306b3f648c7949e5a1d7dc6519eb7df37d25891c (patch)
treebe5f5a52569f3b0ca03503577a556a436ecdaf50 /generic
parentf3cc548bb35e246dad1cb4bb6d2cdc90278b9e1a (diff)
downloadtcl-bug_3397515.zip
tcl-bug_3397515.tar.gz
tcl-bug_3397515.tar.bz2
Prevent segfaults attempting to use thread maps after they've been deleted.bug_3397515
Diffstat (limited to 'generic')
-rw-r--r--generic/tclIORChan.c3
-rw-r--r--generic/tclIORTrans.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c
index 846618c..8ab36d0 100644
--- a/generic/tclIORChan.c
+++ b/generic/tclIORChan.c
@@ -2525,6 +2525,9 @@ DeleteReflectedChannelMap(
* interpreter. They have already been marked as dead.
*/
+ if (TclInThreadExit()) {
+ return;
+ }
rcmPtr = GetThreadReflectedChannelMap();
for (hPtr = Tcl_FirstHashEntry(&rcmPtr->map, &hSearch);
hPtr != NULL;
diff --git a/generic/tclIORTrans.c b/generic/tclIORTrans.c
index fa973c7..949d42d 100644
--- a/generic/tclIORTrans.c
+++ b/generic/tclIORTrans.c
@@ -2200,6 +2200,9 @@ DeleteReflectedTransformMap(
* interpreter. They have already been marked as dead.
*/
+ if (TclInThreadExit()) {
+ return;
+ }
rtmPtr = GetThreadReflectedTransformMap();
for (hPtr = Tcl_FirstHashEntry(&rtmPtr->map, &hSearch);
hPtr != NULL;