429653e
From d6a3e574497b8f4855a0bb9e5c1eb3e1b6ebb770 Mon Sep 17 00:00:00 2001
429653e
From: Peter Hutterer <peter.hutterer@who-t.net>
429653e
Date: Thu, 13 Aug 2009 16:37:00 +1000
429653e
Subject: [PATCH] Xext: fix up wrong conditions for negative sync transitions.
429653e
429653e
If the counter had a value higher than the trigger value for a negative
429653e
transition, the trigger value did not get set.
429653e
429653e
The correct sequence of checks is:
429653e
if (positive transition)
429653e
   if (counter value < trigger value)
429653e
      set up trigger
429653e
if (negative transition)
429653e
   if (counter value > trigger value)
429653e
      set up trigger
429653e
429653e
Red Hat Bug 501601 <https://bugzilla.redhat.com/show_bug.cgi?id=501601>
429653e
---
429653e
 Xext/sync.c |   32 ++++++++++++++------------------
429653e
 1 files changed, 14 insertions(+), 18 deletions(-)
429653e
429653e
diff --git a/Xext/sync.c b/Xext/sync.c
429653e
index 5f4ce56..667f8ab 100644
429653e
--- a/Xext/sync.c
429653e
+++ b/Xext/sync.c
429653e
@@ -962,28 +962,24 @@ SyncComputeBracketValues(SyncCounter *pCounter, Bool startOver)
429653e
 		pnewltval = &psci->bracket_less;
429653e
 	    }
429653e
 	}
429653e
-	else if ( (pTrigger->test_type == XSyncPositiveTransition &&
429653e
+	else if (pTrigger->test_type == XSyncNegativeTransition &&
429653e
 		   ct != XSyncCounterNeverIncreases)
429653e
-		 ||
429653e
-		 (pTrigger->test_type == XSyncNegativeTransition &&
429653e
+	{
429653e
+	    if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) &&
429653e
+		XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less))
429653e
+	    {
429653e
+		psci->bracket_less = pTrigger->test_value;
429653e
+		pnewltval = &psci->bracket_less;
429653e
+	    }
429653e
+	}
429653e
+        else if (pTrigger->test_type == XSyncPositiveTransition &&
429653e
 		  ct != XSyncCounterNeverDecreases)
429653e
-		 )
429653e
 	{
429653e
-	    if (XSyncValueLessThan(pCounter->value, pTrigger->test_value))
429653e
+	    if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) &&
429653e
+		XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater))
429653e
 	    {
429653e
-		if (XSyncValueLessThan(pTrigger->test_value,
429653e
-				       psci->bracket_greater))
429653e
-		{
429653e
-		    psci->bracket_greater = pTrigger->test_value;
429653e
-		    pnewgtval = &psci->bracket_greater;
429653e
-		}
429653e
-		else
429653e
-		if (XSyncValueGreaterThan(pTrigger->test_value,
429653e
-					  psci->bracket_less))
429653e
-		{
429653e
-		    psci->bracket_less = pTrigger->test_value;
429653e
-		    pnewltval = &psci->bracket_less;
429653e
-		}
429653e
+		psci->bracket_greater = pTrigger->test_value;
429653e
+		pnewgtval = &psci->bracket_greater;
429653e
 	    }
429653e
 	}
429653e
     } /* end for each trigger */
429653e
-- 
429653e
1.6.3.rc1.2.g0164.dirty
429653e