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