From 2a04ff4dd5c087cfb03656d828ed02be8ddac3d8 Mon Sep 17 00:00:00 2001 From: pooryorick Date: Tue, 23 Apr 2019 12:59:20 +0000 Subject: Ensure that Tcl_CreateTimerHandler is not called if there is an existing timer already scheduled. --- generic/tclIORChan.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/generic/tclIORChan.c b/generic/tclIORChan.c index 8a7a16a..477452b 100644 --- a/generic/tclIORChan.c +++ b/generic/tclIORChan.c @@ -932,12 +932,16 @@ TclChanPostEventObjCmd( if (rcPtr->owner == rcPtr->thread) { #endif if (events & TCL_READABLE) { + if (rcPtr->readTimer == NULL) { rcPtr->readTimer = Tcl_CreateTimerHandler(SYNTHETIC_EVENT_TIME, TimerRunRead, rcPtr); + } } if (events & TCL_WRITABLE) { + if (rcPtr->writeTimer == NULL) { rcPtr->writeTimer = Tcl_CreateTimerHandler(SYNTHETIC_EVENT_TIME, TimerRunWrite, rcPtr); + } } #if TCL_THREADS } else { @@ -991,7 +995,7 @@ TimerRunRead( ClientData clientData) { ReflectedChannel *rcPtr = clientData; - rcPtr->readTimer = 0; + rcPtr->readTimer = NULL; Tcl_NotifyChannel(rcPtr->chan, TCL_READABLE); } @@ -1000,7 +1004,7 @@ TimerRunWrite( ClientData clientData) { ReflectedChannel *rcPtr = clientData; - rcPtr->writeTimer = 0; + rcPtr->writeTimer = NULL; Tcl_NotifyChannel(rcPtr->chan, TCL_WRITABLE); } -- cgit v0.12