From 56cafd677815347cec86687bfb1b0f7a7254b5ed Mon Sep 17 00:00:00 2001 From: dgp Date: Tue, 8 Mar 2016 15:52:23 +0000 Subject: [bbc304f61a] Avoid event handling when reflected channel has a watch change half-completed. (First half in 1 thread, second in another). When this is allowed to happen, false alarm errors from [chan postevent] are the result when timing is unlucky. --- generic/tclIORChan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c index c9939d6..85cbec4 100644 --- a/generic/tclIORChan.c +++ b/generic/tclIORChan.c @@ -1515,8 +1515,6 @@ ReflectWatch( return; } - rcPtr->interest = mask; - /* * Are we in the correct thread? */ @@ -1539,6 +1537,7 @@ ReflectWatch( Tcl_Preserve(rcPtr); + rcPtr->interest = mask; maskObj = DecodeEventMask(mask); /* assert maskObj.refCount == 1 */ (void) InvokeTclMethod(rcPtr, METH_WATCH, maskObj, NULL, NULL); @@ -2887,6 +2886,7 @@ ForwardProc( /* assert maskObj.refCount == 1 */ Tcl_Preserve(rcPtr); + rcPtr->interest = paramPtr->watch.mask; (void) InvokeTclMethod(rcPtr, METH_WATCH, maskObj, NULL, NULL); Tcl_DecrRefCount(maskObj); Tcl_Release(rcPtr); -- cgit v0.12