diff options
author | dgp <dgp@users.sourceforge.net> | 2011-08-30 15:44:28 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2011-08-30 15:44:28 (GMT) |
commit | 306b3f648c7949e5a1d7dc6519eb7df37d25891c (patch) | |
tree | be5f5a52569f3b0ca03503577a556a436ecdaf50 | |
parent | f3cc548bb35e246dad1cb4bb6d2cdc90278b9e1a (diff) | |
download | tcl-306b3f648c7949e5a1d7dc6519eb7df37d25891c.zip tcl-306b3f648c7949e5a1d7dc6519eb7df37d25891c.tar.gz tcl-306b3f648c7949e5a1d7dc6519eb7df37d25891c.tar.bz2 |
Prevent segfaults attempting to use thread maps after they've been deleted.bug_3397515
-rw-r--r-- | generic/tclIORChan.c | 3 | ||||
-rw-r--r-- | generic/tclIORTrans.c | 3 |
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; |