summaryrefslogtreecommitdiffstats
path: root/generic/tclIORChan.c
diff options
context:
space:
mode:
authorpooryorick <com.digitalsmarties@pooryorick.com>2019-04-23 12:59:20 (GMT)
committerpooryorick <com.digitalsmarties@pooryorick.com>2019-04-23 12:59:20 (GMT)
commit2a04ff4dd5c087cfb03656d828ed02be8ddac3d8 (patch)
treedc5dee9d7394c860f6b54c69f6d5312df58df92e /generic/tclIORChan.c
parent70d68cb355c39d317d984605a623b9d242d0fdc7 (diff)
downloadtcl-2a04ff4dd5c087cfb03656d828ed02be8ddac3d8.zip
tcl-2a04ff4dd5c087cfb03656d828ed02be8ddac3d8.tar.gz
tcl-2a04ff4dd5c087cfb03656d828ed02be8ddac3d8.tar.bz2
Ensure that Tcl_CreateTimerHandler is not called if there is an existing timer
already scheduled.
Diffstat (limited to 'generic/tclIORChan.c')
-rw-r--r--generic/tclIORChan.c8
1 files 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);
}