Hello community, here is the log from the commit of package xorg-x11-server for openSUSE:Factory checked in at Wed Apr 21 17:58:36 CEST 2010. -------- --- xorg-x11-server/xorg-x11-server.changes 2010-04-10 20:59:42.000000000 +0200 +++ xorg-x11-server/xorg-x11-server.changes 2010-04-21 16:15:12.000000000 +0200 @@ -1,0 +2,9 @@ +Wed Apr 21 16:03:07 CEST 2010 - eich@suse.de + +- Prevent XSync Alarms from senslessly calling CheckTrigger() when inactive. + If an XSync Alarm is set to inactive there is no need to check if a trigger + needs to fire. Doing so if the counter is the IdleCounter will put the + server on 100 percent CPU load since the select timeout is set to 0 + (bnc #584919). + +------------------------------------------------------------------- calling whatdependson for head-i586 New: ---- 0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xorg-x11-server.spec ++++++ --- /var/tmp/diff_new_pack.pqD8ul/_old 2010-04-21 17:43:39.000000000 +0200 +++ /var/tmp/diff_new_pack.pqD8ul/_new 2010-04-21 17:43:39.000000000 +0200 @@ -32,7 +32,7 @@ %endif Url: http://xorg.freedesktop.org/ Version: 7.5_%{dirsuffix} -Release: 4 +Release: 5 License: GPLv2+ ; MIT License (or similar) BuildRoot: %{_tmppath}/%{name}-%{version}-build Group: System/X11/Servers/XF86_4 @@ -112,6 +112,7 @@ Patch208: xorg-evdev-conf.diff Patch209: sw_cursor_on_randr.patch Patch210: pio_ia64.diff +Patch211: 0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch %if %moblin Patch300: moblin-use_preferred_mode_for_all_outputs.diff %endif @@ -234,6 +235,7 @@ %patch208 -p0 %patch209 -p1 %patch210 -p1 +%patch211 -p1 %if %moblin %patch300 -p1 %endif ++++++ 0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch ++++++
From d1d9d4e5f8f9ac1d22e1258759d6ee9e49c7fe90 Mon Sep 17 00:00:00 2001 From: Egbert Eich
Date: Fri, 9 Apr 2010 15:10:32 +0200 Subject: [PATCH] Prevent XSync Alarms from senslessly calling CheckTrigger() when inactive.
If an XSync Alarm is set to inactive there is no need to check if a trigger needs to fire. Doing so if the counter is the IdleCounter will put the server on 100 percent CPU load since the select timeout is set to 0. --- xorg-server-1.8.0/Xext/sync.c | 11 +++++++++-- xorg-server-1.8.0/Xext/syncsrv.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/xorg-server-1.8.0/Xext/sync.c b/xorg-server-1.8.0/Xext/sync.c index fd7b1ad..4c45399 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -518,6 +518,10 @@ SyncAlarmTriggerFired(SyncTrigger *pTrigger) pAlarm->state = XSyncAlarmInactive; } } + /* Stop server from looping! */ + if (pAlarm->state == XSyncAlarmInactive) + SyncDeleteTriggerFromCounter(&pAlarm->trigger); + /* The AlarmNotify event has to have the "new state of the alarm" * which we can't be sure of until this point. However, it has * to have the "old" trigger test value. That's the reason for @@ -730,7 +734,7 @@ SyncChangeAlarmAttributes(ClientPtr client, SyncAlarm *pAlarm, Mask mask, XSyncCounter counter; Mask origmask = mask; - counter = pAlarm->trigger.pCounter ? pAlarm->trigger.pCounter->id : None; + counter = pAlarm->counter_id; while (mask) { @@ -741,7 +745,7 @@ SyncChangeAlarmAttributes(ClientPtr client, SyncAlarm *pAlarm, Mask mask, case XSyncCACounter: mask &= ~XSyncCACounter; /* sanity check in SyncInitTrigger */ - counter = *values++; + counter = pAlarm->counter_id = *values++; break; case XSyncCAValueType: @@ -815,6 +819,7 @@ SyncChangeAlarmAttributes(ClientPtr client, SyncAlarm *pAlarm, Mask mask, return status; /* XXX spec does not really say to do this - needs clarification */ + /* It's the only place where it is set to XSyncAlarmActive! */ pAlarm->state = XSyncAlarmActive; return Success; } @@ -1617,8 +1622,10 @@ ProcSyncCreateAlarm(ClientPtr client) pAlarm->client = client; pAlarm->alarm_id = stuff->id; + pAlarm->counter_id = None; XSyncIntToValue(&pAlarm->delta, 1L); pAlarm->events = TRUE; + /* SyncChangeAlarmAttributes() changes this - no need to set this here! */ pAlarm->state = XSyncAlarmInactive; pAlarm->pEventClients = NULL; status = SyncChangeAlarmAttributes(client, pAlarm, vmask, diff --git a/xorg-server-1.8.0/Xext/syncsrv.h b/xorg-server-1.8.0/Xext/syncsrv.h index 6d0e3d6..527729d 100644 --- a/Xext/syncsrv.h +++ b/Xext/syncsrv.h @@ -129,6 +129,7 @@ typedef struct _SyncAlarm { int events; int state; SyncAlarmClientList *pEventClients; + XSyncCounter counter_id; } SyncAlarm; typedef struct { -- 1.6.4.2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org