diff --git a/0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch b/0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch index 81c2ae4..cdab25b 100644 --- a/0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch +++ b/0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch @@ -11,11 +11,11 @@ server on 100 percent CPU load since the select timeout is set to 0. 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) +Index: xorg-server-1.8.0/Xext/sync.c +=================================================================== +--- xorg-server-1.8.0.orig/Xext/sync.c ++++ xorg-server-1.8.0/Xext/sync.c +@@ -518,6 +518,10 @@ SyncAlarmTriggerFired(SyncTrigger *pTrig pAlarm->state = XSyncAlarmInactive; } } @@ -26,7 +26,7 @@ index fd7b1ad..4c45399 100644 /* 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, +@@ -730,7 +734,7 @@ SyncChangeAlarmAttributes(ClientPtr clie XSyncCounter counter; Mask origmask = mask; @@ -35,7 +35,7 @@ index fd7b1ad..4c45399 100644 while (mask) { -@@ -741,7 +745,7 @@ SyncChangeAlarmAttributes(ClientPtr client, SyncAlarm *pAlarm, Mask mask, +@@ -741,7 +745,7 @@ SyncChangeAlarmAttributes(ClientPtr clie case XSyncCACounter: mask &= ~XSyncCACounter; /* sanity check in SyncInitTrigger */ @@ -44,7 +44,22 @@ index fd7b1ad..4c45399 100644 break; case XSyncCAValueType: -@@ -815,6 +819,7 @@ SyncChangeAlarmAttributes(ClientPtr client, SyncAlarm *pAlarm, Mask mask, +@@ -808,6 +812,14 @@ SyncChangeAlarmAttributes(ClientPtr clie + return BadMatch; + } + } ++ if (pAlarm->state == XSyncAlarmInactive) { ++ /* ++ * If we are inactive the trigger has been deleted from the counter. ++ * Persuade SyncInitTrigger() to readd it. ++ */ ++ origmask |= XSyncCACounter; ++ pAlarm->trigger.pCounter = NULL; ++ } + + /* postpone this until now, when we're sure nothing else can go wrong */ + if ((status = SyncInitTrigger(client, &pAlarm->trigger, counter, +@@ -815,6 +827,7 @@ SyncChangeAlarmAttributes(ClientPtr clie return status; /* XXX spec does not really say to do this - needs clarification */ @@ -52,7 +67,7 @@ index fd7b1ad..4c45399 100644 pAlarm->state = XSyncAlarmActive; return Success; } -@@ -1617,8 +1622,10 @@ ProcSyncCreateAlarm(ClientPtr client) +@@ -1617,8 +1630,10 @@ ProcSyncCreateAlarm(ClientPtr client) pAlarm->client = client; pAlarm->alarm_id = stuff->id; @@ -63,10 +78,10 @@ index fd7b1ad..4c45399 100644 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 +Index: xorg-server-1.8.0/Xext/syncsrv.h +=================================================================== +--- xorg-server-1.8.0.orig/Xext/syncsrv.h ++++ xorg-server-1.8.0/Xext/syncsrv.h @@ -129,6 +129,7 @@ typedef struct _SyncAlarm { int events; int state; @@ -75,6 +90,3 @@ index 6d0e3d6..527729d 100644 } SyncAlarm; typedef struct { --- -1.6.4.2 - diff --git a/xorg-x11-server.changes b/xorg-x11-server.changes index 42ce880..bcea4cd 100644 --- a/xorg-x11-server.changes +++ b/xorg-x11-server.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Apr 26 10:40:11 UTC 2010 - eich@suse.de + +- Updated "Prevent XSync Alarms from senslessly calling CheckTrigger()" + to make sure SyncTriggerInit() readds trigger to counter (bnc #584919). + ------------------------------------------------------------------- Mon Apr 26 12:08:44 CEST 2010 - sndirsch@suse.de