Tcl Source Code

Check-in [65b4e0df6a]
Login
Bounty program for improvements to Tcl and certain Tcl packages.

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:timer: fixed setup of the block-time to 0.0 by pending timer of new generation, example: tclsh -c "proc test {} {after 1000 test}; test; vwait infinite"
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | sebres-event-perf-fix-busy-wait
Files: files | file ages | folders
SHA1: 65b4e0df6aeab0fa6ff979ab9e45d815434571da
User & Date: sebres 2017-07-13 15:41:57
Context
2017-07-13
15:43
avoid busy wait if new short block-time will be set within service event-cycle (Tcl_DoOneEvent) prod... Closed-Leaf check-in: 834c53d3c6 user: sebres tags: sebres-event-perf-fix-busy-wait
15:41
timer: fixed setup of the block-time to 0.0 by pending timer of new generation, example: tclsh -c ... check-in: 65b4e0df6a user: sebres tags: sebres-event-perf-fix-busy-wait
2017-07-10
11:17
merge core-8-5-branch check-in: 230de0c28e user: sebres tags: sebres-8-5-event-perf-branch
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to generic/tclTimer.c.

1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
	}
	ckfree((char *) tmrEvent);
    
    nextEvent:
	/* be sure that timer-list was not changed inside the proc call */
	if (currentEpoch != tsdPtr->timerListEpoch) {
	    /* timer-list was changed - stop processing */
	    tsdPtr->timerPending++;
	    break;
	}
    }

    /* pending timer events, so mark (queue) timer events  */
    if (tsdPtr->timerPending >= 1) {
    	tsdPtr->timerPending = 1;






<







1204
1205
1206
1207
1208
1209
1210

1211
1212
1213
1214
1215
1216
1217
	}
	ckfree((char *) tmrEvent);
    
    nextEvent:
	/* be sure that timer-list was not changed inside the proc call */
	if (currentEpoch != tsdPtr->timerListEpoch) {
	    /* timer-list was changed - stop processing */

	    break;
	}
    }

    /* pending timer events, so mark (queue) timer events  */
    if (tsdPtr->timerPending >= 1) {
    	tsdPtr->timerPending = 1;