xserver: Branch 'master' - 7 commits

Keith Packard keithp at kemper.freedesktop.org
Mon May 10 15:40:49 PDT 2010


 Xext/sync.c           |   19 +++-----
 dix/gc.c              |  117 +++++++++++++++++++-------------------------------
 hw/dmx/dmxextension.c |    2 
 mi/mipolypnt.c        |    5 +-
 mi/miwideline.c       |   80 ++++++++++++++++++++++++++++++----
 mi/miwideline.h       |   64 ---------------------------
 6 files changed, 129 insertions(+), 158 deletions(-)

New commits:
commit 758b8614477b53dc3de2b884fec5ccaf8a736432
Author: David James <davidjames at google.com>
Date:   Mon May 10 14:00:49 2010 -0700

    Fix wrong 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.
    
    X.Org Bug 27023 <http://bugs.freedesktop.org/show_bug.cgi?id=27023>
    
    Signed-off-by: David James <davidjames at google.com>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>

diff --git a/Xext/sync.c b/Xext/sync.c
index 990cb67..e865e52 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -94,7 +94,7 @@ static SyncCounter **SysCounterList = NULL;
 #define XSyncCAAllTrigger \
     (XSyncCACounter | XSyncCAValueType | XSyncCAValue | XSyncCATestType)
 
-static void SyncComputeBracketValues(SyncCounter *, Bool);
+static void SyncComputeBracketValues(SyncCounter *);
 
 static void SyncInitServerTime(void);
 
@@ -167,7 +167,7 @@ SyncDeleteTriggerFromCounter(SyncTrigger *pTrigger)
     }
 
     if (IsSystemCounter(pTrigger->pCounter))
-	SyncComputeBracketValues(pTrigger->pCounter, /*startOver*/ TRUE);
+	SyncComputeBracketValues(pTrigger->pCounter);
 }
 
 
@@ -194,7 +194,7 @@ SyncAddTriggerToCounter(SyncTrigger *pTrigger)
     pTrigger->pCounter->pTriglist = pCur;
 
     if (IsSystemCounter(pTrigger->pCounter))
-	SyncComputeBracketValues(pTrigger->pCounter, /*startOver*/ TRUE);
+	SyncComputeBracketValues(pTrigger->pCounter);
 
     return Success;
 }
@@ -351,7 +351,7 @@ SyncInitTrigger(ClientPtr client, SyncTrigger *pTrigger, XSyncCounter counter,
     }
     else if (IsSystemCounter(pCounter))
     {
-	SyncComputeBracketValues(pCounter, /*startOver*/ TRUE);
+	SyncComputeBracketValues(pCounter);
     }
 
     return Success;
@@ -646,7 +646,7 @@ SyncChangeCounter(SyncCounter *pCounter, CARD64 newval)
 
     if (IsSystemCounter(pCounter))
     {
-	SyncComputeBracketValues(pCounter, /* startOver */ FALSE);
+	SyncComputeBracketValues(pCounter);
     }
 }
 
@@ -913,7 +913,7 @@ SyncDestroySystemCounter(pointer pSysCounter)
 }
 
 static void
-SyncComputeBracketValues(SyncCounter *pCounter, Bool startOver)
+SyncComputeBracketValues(SyncCounter *pCounter)
 {
     SyncTriggerList *pCur;
     SyncTrigger *pTrigger;
@@ -930,11 +930,8 @@ SyncComputeBracketValues(SyncCounter *pCounter, Bool startOver)
     if (ct == XSyncCounterNeverChanges)
 	return;
 
-    if (startOver)
-    {
-	XSyncMaxValue(&psci->bracket_greater);
-	XSyncMinValue(&psci->bracket_less);
-    }
+    XSyncMaxValue(&psci->bracket_greater);
+    XSyncMinValue(&psci->bracket_less);
 
     for (pCur = pCounter->pTriglist; pCur; pCur = pCur->next)
     {
commit 95074538cce93abc1739a4d9dd78b0500fb8fec9
Merge: c079977... 2160ff5...
Author: Keith Packard <keithp at keithp.com>
Date:   Mon May 10 13:49:33 2010 -0700

    Merge remote branch 'jamey/for-keith'

commit 2160ff5240d7e11bdc6cec8859fd1f10395c8edd
Author: Jamey Sharp <jamey at minilop.net>
Date:   Fri May 7 20:00:40 2010 -0700

    Simplify error-handling in dixChangeGC.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/dix/gc.c b/dix/gc.c
index 6490165..3058e15 100644
--- a/dix/gc.c
+++ b/dix/gc.c
@@ -263,78 +263,68 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 		break;
 	    }
 	    case GCTile:
-	    {
-		XID newpix = 0;
 		if (pUnion)
 		{
 		    NEXT_PTR(PixmapPtr, pPixmap);
-		    rc = Success;
 		}
 		else
 		{
+		    XID newpix;
 		    NEXTVAL(XID, newpix);
 		    rc = dixLookupResourceByType((pointer *)&pPixmap, newpix,
 					   RT_PIXMAP, client, DixReadAccess);
-		}
-		if (rc == Success)
-		{
-		    if ((pPixmap->drawable.depth != pGC->depth) ||
-			(pPixmap->drawable.pScreen != pGC->pScreen))
+		    if (rc != Success)
 		    {
-			error = BadMatch;
-		    }
-		    else
-		    {
-			pPixmap->refcnt++;
-			if (!pGC->tileIsPixel)
-			    (* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
-			pGC->tileIsPixel = FALSE;
-			pGC->tile.pixmap = pPixmap;
+			clientErrorValue = newpix;
+			error = (rc == BadValue) ? BadPixmap : rc;
+			break;
 		    }
 		}
+		if ((pPixmap->drawable.depth != pGC->depth) ||
+		    (pPixmap->drawable.pScreen != pGC->pScreen))
+		{
+		    error = BadMatch;
+		}
 		else
 		{
-		    clientErrorValue = newpix;
-		    error = (rc == BadValue) ? BadPixmap : rc;
+		    pPixmap->refcnt++;
+		    if (!pGC->tileIsPixel)
+			(* pGC->pScreen->DestroyPixmap)(pGC->tile.pixmap);
+		    pGC->tileIsPixel = FALSE;
+		    pGC->tile.pixmap = pPixmap;
 		}
 		break;
-	    }
 	    case GCStipple:
-	    {
-		XID newstipple = 0;
 		if (pUnion)
 		{
 		    NEXT_PTR(PixmapPtr, pPixmap);
-		    rc = Success;
 		}
 		else
 		{
+		    XID newstipple;
 		    NEXTVAL(XID, newstipple)
 		    rc = dixLookupResourceByType((pointer *)&pPixmap, newstipple,
 					   RT_PIXMAP, client, DixReadAccess);
-		}
-		if (rc == Success)
-		{
-		    if ((pPixmap->drawable.depth != 1) ||
-			(pPixmap->drawable.pScreen != pGC->pScreen))
+		    if (rc != Success)
 		    {
-			error = BadMatch;
-		    }
-		    else
-		    {
-			pPixmap->refcnt++;
-			if (pGC->stipple)
-			    (* pGC->pScreen->DestroyPixmap)(pGC->stipple);
-			pGC->stipple = pPixmap;
+			clientErrorValue = newstipple;
+			error = (rc == BadValue) ? BadPixmap : rc;
+			break;
 		    }
 		}
+		if ((pPixmap->drawable.depth != 1) ||
+		    (pPixmap->drawable.pScreen != pGC->pScreen))
+		{
+		    error = BadMatch;
+		}
 		else
 		{
-		    clientErrorValue = newstipple;
-		    error = (rc == BadValue) ? BadPixmap : rc;
+		    pPixmap->refcnt++;
+		    if (pGC->stipple)
+			(* pGC->pScreen->DestroyPixmap)(pGC->stipple);
+		    pGC->stipple = pPixmap;
 		}
 		break;
-	    }
 	    case GCTileStipXOrigin:
 		NEXTVAL(INT16, pGC->patOrg.x);
 		break;
@@ -344,30 +334,27 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 	    case GCFont:
     	    {
 		FontPtr	pFont;
-		XID newfont = 0;
 		if (pUnion)
 		{
 		    NEXT_PTR(FontPtr, pFont);
-		    rc = Success;
 		}
 		else
 		{
+		    XID newfont;
 		    NEXTVAL(XID, newfont)
 		    rc = dixLookupResourceByType((pointer *)&pFont, newfont,
 					   RT_FONT, client, DixUseAccess);
+		    if (rc != Success)
+		    {
+			clientErrorValue = newfont;
+			error = (rc == BadValue) ? BadFont : rc;
+			break;
+		    }
 		}
-		if (rc == Success)
-		{
-		    pFont->refcnt++;
-		    if (pGC->font)
-    		        CloseFont(pGC->font, (Font)0);
-		    pGC->font = pFont;
-		 }
-		else
-		{
-		    clientErrorValue = newfont;
-		    error = (rc == BadValue) ? BadFont : rc;
-		}
+		pFont->refcnt++;
+		if (pGC->font)
+		    CloseFont(pGC->font, (Font)0);
+		pGC->font = pFont;
 		break;
 	    }
 	    case GCSubwindowMode:
@@ -403,22 +390,16 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 		NEXTVAL(INT16, pGC->clipOrg.y);
 		break;
 	    case GCClipMask:
-	    {
-		Pixmap pid = 0;
-		int    clipType = 0;
-
 		if (pUnion)
 		{
 		    NEXT_PTR(PixmapPtr, pPixmap);
 		}
 		else
 		{
+		    Pixmap pid;
 		    NEXTVAL(Pixmap, pid)
 		    if (pid == None)
-		    {
-			clipType = CT_NONE;
 			pPixmap = NullPixmap;
-		    }
 		    else {
 			rc = dixLookupResourceByType((pointer *)&pPixmap, pid,
 					       RT_PIXMAP, client,
@@ -426,6 +407,7 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 			if (rc != Success) {
 			    clientErrorValue = pid;
 			    error = (rc == BadValue) ? BadPixmap : rc;
+			    break;
 			}
 		    }
 		}
@@ -436,20 +418,13 @@ dixChangeGC(ClientPtr client, GC *pGC, BITS32 mask, CARD32 *pC32, ChangeGCValPtr
 			(pPixmap->drawable.pScreen != pGC->pScreen))
 		    {
 			error = BadMatch;
+			break;
 		    }
-		    else
-		    {
-			clipType = CT_PIXMAP;
-			pPixmap->refcnt++;
-		    }
-		}
-		if(error == Success)
-		{
-		    (*pGC->funcs->ChangeClip)(pGC, clipType,
-					      (pointer)pPixmap, 0);
+		    pPixmap->refcnt++;
 		}
+		(*pGC->funcs->ChangeClip)(pGC, pPixmap ? CT_PIXMAP : CT_NONE,
+					  (pointer)pPixmap, 0);
 		break;
-	    }
 	    case GCDashOffset:
 		NEXTVAL(INT16, pGC->dashOffset);
 		break;
commit 4080cd42fde8b4c693eab7557581af2622479109
Author: Jamey Sharp <jamey at minilop.net>
Date:   Sat May 8 09:41:46 2010 -0700

    miPolyPoint bugfix: Check memory allocation before changing the GC.
    
    miPolyPoint ought to leave the GC unchanged even if it fails. ajax says:
    
    > We have a new winner for the oldest-bug competition!  It's actually
    > been like that since X11R1:
    >
    > -rw-r--r--. 1 ajax ajax 2817 1987-09-12 01:20 ddx/mi/mipolypnt.c
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Adam Jackson <ajax at redhat.com>

diff --git a/mi/mipolypnt.c b/mi/mipolypnt.c
index 5d6243a..12771ee 100644
--- a/mi/mipolypnt.c
+++ b/mi/mipolypnt.c
@@ -73,6 +73,9 @@ miPolyPoint(
     int			i;
     xPoint 		*ppt;
 
+    if(!(pwidthInit = xalloc(npt * sizeof(int))))
+	return;
+
     /* make pointlist origin relative */
     if (mode == CoordModePrevious)
     {
@@ -107,8 +110,6 @@ miPolyPoint(
 	DoChangeGC(pGC, GCFillStyle, &fsNew, 0);
 	ValidateGC(pDrawable, pGC);
     }
-    if(!(pwidthInit = xalloc(npt * sizeof(int))))
-	return;
     pwidth = pwidthInit;
     for(i = 0; i < npt; i++)
 	*pwidth++ = 1;
commit ccdaecc5471cc2d56b1702eeed4280bb4d58c515
Author: Jamey Sharp <jamey at minilop.net>
Date:   Sat May 8 12:26:47 2010 -0700

    Move AppendSpanGroup from miwideline.h to miwideline.c.
    
    Also make it stop being a macro.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miwideline.c b/mi/miwideline.c
index 7e18603..181b12e 100644
--- a/mi/miwideline.c
+++ b/mi/miwideline.c
@@ -52,6 +52,33 @@ from The Open Group.
 #include "miwideline.h"
 #include "mi.h"
 
+/*
+ * interface data to span-merging polygon filler
+ */
+
+typedef struct _SpanData {
+    SpanGroup	fgGroup, bgGroup;
+} SpanDataRec, *SpanDataPtr;
+
+static void
+AppendSpanGroup(GCPtr pGC, unsigned long pixel, Spans *spanPtr, SpanDataPtr spanData)
+{
+    SpanGroup *group, *othergroup = NULL;
+    if (pixel == pGC->fgPixel)
+    {
+	group = &spanData->fgGroup;
+	if (pGC->lineStyle == LineDoubleDash)
+	    othergroup = &spanData->bgGroup;
+    }
+    else
+    {
+	group = &spanData->bgGroup;
+	othergroup = &spanData->fgGroup;
+    }
+    miAppendSpans (group, othergroup, spanPtr);
+}
+
+
 static void miLineArc(DrawablePtr pDraw, GCPtr pGC,
 		      unsigned long pixel, SpanDataPtr spanData,
 		      LineFacePtr leftFace,
@@ -213,7 +240,7 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
     else
     {
 	spanRec.count = ppt - spanRec.points;
-	AppendSpanGroup (pGC, pixel, &spanRec, spanData)
+	AppendSpanGroup (pGC, pixel, &spanRec, spanData);
     }
 }
 
@@ -282,7 +309,7 @@ miFillRectPolyHelper (
 	    y++;
 	}
 	spanRec.count = ppt - spanRec.points;
-	AppendSpanGroup (pGC, pixel, &spanRec, spanData)
+	AppendSpanGroup (pGC, pixel, &spanRec, spanData);
     }
 }
 
@@ -1132,7 +1159,7 @@ miLineArc (
     else
     {
 	spanRec.count = n;
-	AppendSpanGroup (pGC, pixel, &spanRec, spanData)
+	AppendSpanGroup (pGC, pixel, &spanRec, spanData);
     }
 }
 
diff --git a/mi/miwideline.h b/mi/miwideline.h
index 41b8bb2..1665ebf 100644
--- a/mi/miwideline.h
+++ b/mi/miwideline.h
@@ -31,30 +31,6 @@ from The Open Group.
 #include "mispans.h"
 #include "mifpoly.h" /* for ICEIL */
 
-/* 
- * interface data to span-merging polygon filler
- */
-
-typedef struct _SpanData {
-    SpanGroup	fgGroup, bgGroup;
-} SpanDataRec, *SpanDataPtr;
-
-#define AppendSpanGroup(pGC, pixel, spanPtr, spanData) { \
-	SpanGroup   *group, *othergroup = NULL; \
-	if (pixel == pGC->fgPixel) \
-	{ \
-	    group = &spanData->fgGroup; \
-	    if (pGC->lineStyle == LineDoubleDash) \
-		othergroup = &spanData->bgGroup; \
-	} \
-	else \
-	{ \
-	    group = &spanData->bgGroup; \
-	    othergroup = &spanData->fgGroup; \
-	} \
-	miAppendSpans (group, othergroup, spanPtr); \
-}
-
 /*
  * Polygon edge description for integer wide-line routines
  */
commit 4272d6722c0f65bdfafc95e91cc2fdb8f6bd072e
Author: Jamey Sharp <jamey at minilop.net>
Date:   Sat May 8 12:18:37 2010 -0700

    Expand macros that are used only in miFillPolyHelper.
    
    Signed-off-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Keith Packard <keithp at keithp.com>

diff --git a/mi/miwideline.c b/mi/miwideline.c
index 210a625..7e18603 100644
--- a/mi/miwideline.c
+++ b/mi/miwideline.c
@@ -138,8 +138,31 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
     while ((left_count || left_height) &&
 	   (right_count || right_height))
     {
-	MIPOLYRELOADLEFT
-	MIPOLYRELOADRIGHT
+	if (!left_height && left_count)
+	{
+	    left_height = left->height;
+	    left_x = left->x;
+	    left_stepx = left->stepx;
+	    left_signdx = left->signdx;
+	    left_e = left->e;
+	    left_dy = left->dy;
+	    left_dx = left->dx;
+	    --left_count;
+	    ++left;
+	}
+
+	if (!right_height && right_count)
+	{
+	    right_height = right->height;
+	    right_x = right->x;
+	    right_stepx = right->stepx;
+	    right_signdx = right->signdx;
+	    right_e = right->e;
+	    right_dy = right->dy;
+	    right_dx = right->dx;
+	    --right_count;
+	    ++right;
+	}
 
 	height = left_height;
 	if (height > right_height)
@@ -157,11 +180,23 @@ miFillPolyHelper (DrawablePtr pDrawable, GCPtr pGC, unsigned long pixel,
 		ppt++;
 		*pwidth++ = right_x - left_x + 1;
 	    }
-    	    y++;
-    	
-	    MIPOLYSTEPLEFT
+	    y++;
 
-	    MIPOLYSTEPRIGHT
+	    left_x += left_stepx;
+	    left_e += left_dx;
+	    if (left_e > 0)
+	    {
+		left_x += left_signdx;
+		left_e -= left_dy;
+	    }
+
+	    right_x += right_stepx;
+	    right_e += right_dx;
+	    if (right_e > 0)
+	    {
+		right_x += right_signdx;
+		right_e -= right_dy;
+	    }
 	}
     }
     if (!spanData)
diff --git a/mi/miwideline.h b/mi/miwideline.h
index 1f615d6..41b8bb2 100644
--- a/mi/miwideline.h
+++ b/mi/miwideline.h
@@ -99,46 +99,6 @@ typedef struct _LineFace {
  * macros for polygon fillers
  */
 
-#define MIPOLYRELOADLEFT    if (!left_height && left_count) { \
-	    	    	    	left_height = left->height; \
-	    	    	    	left_x = left->x; \
-	    	    	    	left_stepx = left->stepx; \
-	    	    	    	left_signdx = left->signdx; \
-	    	    	    	left_e = left->e; \
-	    	    	    	left_dy = left->dy; \
-	    	    	    	left_dx = left->dx; \
-	    	    	    	--left_count; \
-	    	    	    	++left; \
-			    }
-
-#define MIPOLYRELOADRIGHT   if (!right_height && right_count) { \
-	    	    	    	right_height = right->height; \
-	    	    	    	right_x = right->x; \
-	    	    	    	right_stepx = right->stepx; \
-	    	    	    	right_signdx = right->signdx; \
-	    	    	    	right_e = right->e; \
-	    	    	    	right_dy = right->dy; \
-	    	    	    	right_dx = right->dx; \
-	    	    	    	--right_count; \
-	    	    	    	++right; \
-			}
-
-#define MIPOLYSTEPLEFT  left_x += left_stepx; \
-    	    	    	left_e += left_dx; \
-    	    	    	if (left_e > 0) \
-    	    	    	{ \
-	    	    	    left_x += left_signdx; \
-	    	    	    left_e -= left_dy; \
-    	    	    	}
-
-#define MIPOLYSTEPRIGHT right_x += right_stepx; \
-    	    	    	right_e += right_dx; \
-    	    	    	if (right_e > 0) \
-    	    	    	{ \
-	    	    	    right_x += right_signdx; \
-	    	    	    right_e -= right_dy; \
-    	    	    	}
-
 #define MILINESETPIXEL(pDrawable, pGC, pixel, oldPixel) { \
     oldPixel = pGC->fgPixel; \
     if (pixel != oldPixel) { \
commit c0799779dffeef8cef228bdc57aa6c8b323e7485
Author: Keith Packard <keithp at keithp.com>
Date:   Mon Apr 26 17:22:12 2010 -0700

    dmxBERestoreRenderGlyph was passing wrong value to free
    
    Signed-off-by: Keith Packard <keithp at keithp.com>
    Reviewed-by: Jamey Sharp <jamey at minilop.net>
    Reviewed-by: Matt Turner <mattst88 at gmail.com>

diff --git a/hw/dmx/dmxextension.c b/hw/dmx/dmxextension.c
index 4e55533..c8e8dae 100644
--- a/hw/dmx/dmxextension.c
+++ b/hw/dmx/dmxextension.c
@@ -1155,7 +1155,7 @@ static void dmxBERestoreRenderGlyph(pointer value, XID id, pointer n)
 		     len_images);
 
     /* Clean up */
-    free(len_images);
+    free(images);
     free(gids);
     free(glyphs);    
 }


More information about the xorg-commit mailing list