mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-05-09 09:38:14 +02:00
sync: split updating and triggering a counter up
Now that the brackets are always the nearest change points (regardless of
transition) we need to update the counters whenever we check for any updates.
Otherwise we end up with a situation where counter->value is out of date and
an alarm doesn't trigger because we're still using the value from last time
something actually triggered.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 2523a445a0)
This commit is contained in:
parent
fa5e4dcfb6
commit
07069f5d71
1 changed files with 11 additions and 2 deletions
13
Xext/sync.c
13
Xext/sync.c
|
|
@ -699,6 +699,14 @@ SyncAwaitTriggerFired(SyncTrigger * pTrigger)
|
|||
FreeResource(pAwaitUnion->header.delete_id, RT_NONE);
|
||||
}
|
||||
|
||||
static CARD64
|
||||
SyncUpdateCounter(SyncCounter *pCounter, CARD64 newval)
|
||||
{
|
||||
CARD64 oldval = pCounter->value;
|
||||
pCounter->value = newval;
|
||||
return oldval;
|
||||
}
|
||||
|
||||
/* This function should always be used to change a counter's value so that
|
||||
* any triggers depending on the counter will be checked.
|
||||
*/
|
||||
|
|
@ -708,8 +716,7 @@ SyncChangeCounter(SyncCounter * pCounter, CARD64 newval)
|
|||
SyncTriggerList *ptl, *pnext;
|
||||
CARD64 oldval;
|
||||
|
||||
oldval = pCounter->value;
|
||||
pCounter->value = newval;
|
||||
oldval = SyncUpdateCounter(pCounter, newval);
|
||||
|
||||
/* run through triggers to see if any become true */
|
||||
for (ptl = pCounter->sync.pTriglist; ptl; ptl = pnext) {
|
||||
|
|
@ -2712,6 +2719,8 @@ IdleTimeCheckBrackets(SyncCounter *counter, XSyncValue idle, XSyncValue *less, X
|
|||
(less && XSyncValueLessOrEqual(idle, *less))) {
|
||||
SyncChangeCounter(counter, idle);
|
||||
}
|
||||
else
|
||||
SyncUpdateCounter(counter, idle);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue