diff options
author | Christopher James Halse Rogers <christopher.halse.rogers@canonical.com> | 2010-12-06 11:24:00 +1100 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2010-12-19 16:43:14 -0800 |
commit | b55bf248581dc66321b24b29f199f6dc8d02db1b (patch) | |
tree | 9bb8619ec7facbccdf8313ee734cf5062960144c /Xext/sync.c | |
parent | f1542f1d716723cba7c323849086585635121893 (diff) |
Xext: Fix edge case with {Positive, Negative}Transition triggers.
The {Positive,Negative}Transition triggers only fire when the counter
goes from strictly {below,above} the threshold. If
SyncComputeBracketValues gets called exactly at this threshold we may update
the bracket values so that the counter is not updated past the threshold.
Signed-off-by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'Xext/sync.c')
-rw-r--r-- | Xext/sync.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/Xext/sync.c b/Xext/sync.c index ab8f20d5c..7ea8a44fa 100644 --- a/Xext/sync.c +++ b/Xext/sync.c @@ -1059,6 +1059,17 @@ SyncComputeBracketValues(SyncCounter *pCounter) { psci->bracket_less = pTrigger->test_value; pnewltval = &psci->bracket_less; + } else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) && + XSyncValueLessThan(pTrigger->test_value, + psci->bracket_greater)) + { + /* + * The value is exactly equal to our threshold. We want one + * more event in the positive direction to ensure we pick up + * when the value *exceeds* this threshold. + */ + psci->bracket_greater = pTrigger->test_value; + pnewgtval = &psci->bracket_greater; } } else if (pTrigger->test_type == XSyncPositiveTransition && @@ -1069,6 +1080,17 @@ SyncComputeBracketValues(SyncCounter *pCounter) { psci->bracket_greater = pTrigger->test_value; pnewgtval = &psci->bracket_greater; + } else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) && + XSyncValueGreaterThan(pTrigger->test_value, + psci->bracket_less)) + { + /* + * The value is exactly equal to our threshold. We want one + * more event in the negative direction to ensure we pick up + * when the value is less than this threshold. + */ + psci->bracket_less = pTrigger->test_value; + pnewltval = &psci->bracket_less; } } } /* end for each trigger */ |