Author: dnusinow Date: 2006-12-12 21:06:43 -0500 (Tue, 12 Dec 2006) New Revision: 4143
Added: trunk/xserver/xorg-server/debian/patches/38_wait_for_something_force_timer_reset.diff Modified: trunk/xserver/xorg-server/debian/changelog trunk/xserver/xorg-server/debian/patches/series Log: * Add 38_wait_for_something_force_timer_reset.diff which forces the server to reset timers when they've overrun in some cases rather than wait forever. Patch by Daniel Stone. Thanks Michel D?\195?\164nzer for pointing the changes out. Closes: #374026 Modified: trunk/xserver/xorg-server/debian/changelog =================================================================== --- trunk/xserver/xorg-server/debian/changelog 2006-12-12 23:59:39 UTC (rev 4142) +++ trunk/xserver/xorg-server/debian/changelog 2006-12-13 02:06:43 UTC (rev 4143) @@ -7,8 +7,12 @@ [ David Nusinow ] * Pull fix for the ignore_abi.diff patch. This one's a major brown bag on my part. Thanks Michel Dänzer. + * Add 38_wait_for_something_force_timer_reset.diff which forces the server + to reset timers when they've overrun in some cases rather than wait + forever. Patch by Daniel Stone. Thanks Michel Dänzer for pointing the + changes out. Closes: #374026 - -- David Nusinow <[EMAIL PROTECTED]> Tue, 12 Dec 2006 18:58:06 -0500 + -- David Nusinow <[EMAIL PROTECTED]> Tue, 12 Dec 2006 20:36:33 -0500 xorg-server (2:1.1.1-11) unstable; urgency=low Added: trunk/xserver/xorg-server/debian/patches/38_wait_for_something_force_timer_reset.diff =================================================================== --- trunk/xserver/xorg-server/debian/patches/38_wait_for_something_force_timer_reset.diff (rev 0) +++ trunk/xserver/xorg-server/debian/patches/38_wait_for_something_force_timer_reset.diff 2006-12-13 02:06:43 UTC (rev 4143) @@ -0,0 +1,81 @@ +From upstream commits 8d3b465eb3d6c93cbbcebe8e5c9298caaaeb650b and +bb7a39ac13731a80fc2d80487f9da760dd34c3ba +Patch by Daniel Stone. + +Index: xorg-server/os/WaitFor.c +=================================================================== +--- xorg-server.orig/os/WaitFor.c 2006-09-18 17:25:50.000000000 -0400 ++++ xorg-server/os/WaitFor.c 2006-12-12 20:35:45.000000000 -0500 +@@ -128,11 +128,13 @@ + struct _OsTimerRec { + OsTimerPtr next; + CARD32 expires; ++ CARD32 delta; + OsTimerCallback callback; + pointer arg; + }; + + static void DoTimer(OsTimerPtr timer, CARD32 now, OsTimerPtr *prev); ++static void CheckAllTimers(CARD32 now); + static OsTimerPtr timers = NULL; + + /***************** +@@ -209,6 +211,12 @@ + { + now = GetTimeInMillis(); + timeout = timers->expires - now; ++ if (timeout > 0 && timeout > timers->delta + 250) { ++ /* time has rewound. reset the timers. */ ++ CheckAllTimers(now); ++ timeout = timers->expires - now; ++ } ++ + if (timeout < 0) + timeout = 0; + waittime.tv_sec = timeout / MILLI_PER_SECOND; +@@ -447,6 +455,21 @@ + } + #endif + ++/* If time has rewound, re-run every affected timer. ++ * Timers might drop out of the list, so we have to restart every time. */ ++static void ++CheckAllTimers(CARD32 now) ++{ ++ OsTimerPtr timer; ++ ++start: ++ for (timer = timers; timer; timer = timer->next) { ++ if (timer->expires - now > timer->delta + 250) { ++ TimerForce(timer); ++ goto start; ++ } ++ } ++} + + static void + DoTimer(OsTimerPtr timer, CARD32 now, OsTimerPtr *prev) +@@ -488,8 +511,13 @@ + } + if (!millis) + return timer; +- if (!(flags & TimerAbsolute)) ++ if (flags & TimerAbsolute) { ++ timer->delta = millis - now; ++ } ++ else { ++ timer->delta = millis; + millis += now; ++ } + timer->expires = millis; + timer->callback = func; + timer->arg = arg; +@@ -503,7 +531,7 @@ + for (prev = &timers; + *prev && (int) ((*prev)->expires - millis) <= 0; + prev = &(*prev)->next) +- ; ++ ; + timer->next = *prev; + *prev = timer; + return timer; Modified: trunk/xserver/xorg-server/debian/patches/series =================================================================== --- trunk/xserver/xorg-server/debian/patches/series 2006-12-12 23:59:39 UTC (rev 4142) +++ trunk/xserver/xorg-server/debian/patches/series 2006-12-13 02:06:43 UTC (rev 4143) @@ -33,3 +33,4 @@ 35_randr_byteswap.patch 36_fix_ffs.patch 37_Fix-__glXDRIbindTexImage-for-32-bpp-on-big-endian-platforms.diff +38_wait_for_something_force_timer_reset.diff -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]