diff options
author | dgp <dgp@users.sourceforge.net> | 2014-04-24 15:27:58 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2014-04-24 15:27:58 (GMT) |
commit | 790e5adaf4cabf6c9dcaa3d109427dbe18f786ff (patch) | |
tree | 9a00b0d5759743211bd698082450c791ccf436b1 | |
parent | 5b5f0209a4f6007ff2804da3f32258bb2148e814 (diff) | |
download | tcl-790e5adaf4cabf6c9dcaa3d109427dbe18f786ff.zip tcl-790e5adaf4cabf6c9dcaa3d109427dbe18f786ff.tar.gz tcl-790e5adaf4cabf6c9dcaa3d109427dbe18f786ff.tar.bz2 |
Make sure the ReflectedChannel struct is freed in the handler thread,
where it was allocated. This constraint allows the struct to safely
hold Tcl_Obj values, which has been convenient for storing callback commands.
-rw-r--r-- | generic/tclIORChan.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c index e462f61..94428bb 100644 --- a/generic/tclIORChan.c +++ b/generic/tclIORChan.c @@ -1145,6 +1145,7 @@ ReflectClose( if (result != TCL_OK) { FreeReceivedError(&p); } + return EOK; } #endif @@ -1169,8 +1170,6 @@ ReflectClose( Tcl_DeleteEvents(ReflectEventDelete, rcPtr); - Tcl_EventuallyFree(rcPtr, (Tcl_FreeProc *) FreeReflectedChannel); - if (result != TCL_OK) { PassReceivedErrorInterp(interp, &p); } @@ -2903,6 +2902,7 @@ ForwardProc( Tcl_GetChannelName(rcPtr->chan)); Tcl_DeleteHashEntry(hPtr); + Tcl_EventuallyFree(rcPtr, (Tcl_FreeProc *) FreeReflectedChannel); break; case ForwardedInput: { |