From cb0736935b972229c3e6e381063853ebe23e9c78 Mon Sep 17 00:00:00 2001 From: das Date: Mon, 21 Aug 2006 01:09:23 +0000 Subject: * macosx/tkMacOSXCarbonEvents.c (CarbonTimerProc): avoid starving main event loop: limit the number of tcl events processed per invocation. Fixes bug reported on tcl-mac by Kevan Hashemi. --- ChangeLog | 6 ++++++ macosx/tkMacOSXCarbonEvents.c | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 36211a1..0350110 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-08-21 Daniel Steffen + + * macosx/tkMacOSXCarbonEvents.c (CarbonTimerProc): avoid starving main + event loop: limit the number of tcl events processed per invocation. + Fixes bug reported on tcl-mac by Kevan Hashemi. + 2006-08-18 Donal K. Fellows * tests/text.test (text-25.15): Added test suggested by Sam diff --git a/macosx/tkMacOSXCarbonEvents.c b/macosx/tkMacOSXCarbonEvents.c index fc81844..e1d963c 100644 --- a/macosx/tkMacOSXCarbonEvents.c +++ b/macosx/tkMacOSXCarbonEvents.c @@ -60,7 +60,7 @@ * software in accordance with the terms specified in this * license. * - * RCS: @(#) $Id: tkMacOSXCarbonEvents.c,v 1.11 2006/04/11 10:22:34 das Exp $ + * RCS: @(#) $Id: tkMacOSXCarbonEvents.c,v 1.12 2006/08/21 01:09:23 das Exp $ */ #include "tkMacOSXInt.h" @@ -379,11 +379,15 @@ CarbonTimerProc ( EventLoopTimerRef timer, void *userData) { - while(carbonTimerEnabled && Tcl_DoOneEvent( - TCL_FILE_EVENTS|TCL_TIMER_EVENTS|TCL_DONT_WAIT)) { + if(carbonTimerEnabled) { + /* Avoid starving main event loop: process at most 4 events. */ + int i = 4; + while(--i && Tcl_DoOneEvent( + TCL_FILE_EVENTS|TCL_TIMER_EVENTS|TCL_DONT_WAIT)) { #if defined(TK_MAC_DEBUG) && defined(TK_MAC_DEBUG_CARBON_EVENTS) - fprintf(stderr, "Processed tcl event from carbon timer\n"); + fprintf(stderr, "Processed tcl event from carbon timer\n"); #endif /* TK_MAC_DEBUG_CARBON_EVENTS */ + } } } -- cgit v0.12