Currently, the SyncComputeBracketValues function in Xext/sync.c calculates bracket values incorrectly when startOver = FALSE. A patch to fix this will be included below. Reproduction recipe: 1. Setup a positive transition alarm for when idle time exceeds 2000ms 2. Setup a positive transition alarm for when idle time exceeds 5000ms 3. Become idle, and wait for the alarms to trigger. Expected result: - When idle time exceeds 2000ms, the first alarm triggers. - When idle time exceeds 5000ms, the second alarm triggers. Actual result: - When idle time exceeds 2000ms, the first alarm triggers. - When idle time exceeds 5000ms, the second alarm does not trigger. Analysis: 1) When you first setup the alarms, the SyncComputeBracketValues function is called with startOver = TRUE. In this case, the bracket values are calculated correctly, and the member variable "bracket_greater" on the idle time counter is set to 2000. 2) When the first alarm triggers, the SyncComputeBracketValues function is called with startOver = FALSE, from SyncChangeCounter. In this case, the second alarm should be set up, and the member variable "bracket_greater" on the idle time counter should be set to 5000. However, because the test value (5000) is greater than the previous value of bracket_greater (2000), this alarm is not enabled. Solution: To fix this problem, I updated the SyncChangeCounter function to call SyncComputeBracketValues with startOver = TRUE. This causes "bracket_greater" to be reset and the alarm to be triggered correctly. After doing this, the startOver variable is always set to TRUE, so I also cleaned up the code and eliminated this parameter altogether.
Created attachment 33963 [details] [review] Fix incorrect calculation of bracket values when startOver = FALSE Currently, SyncComputeBracketValues reuses old values of bracket_greater and bracket_less when startOver = FALSE. This can result in incorrect bracket values. To fix this issue, the startOver parameter is removed, and we do not reuse old values of bracket_greater and bracket_less.
Please send the patch to the xorg-devel mailing list for review.
FIXED in 758b8614477b53dc3de2b884fec5ccaf8a736432 / git://anongit.freedesktop.org/xorg/xserver
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.