Commit 45311f78 authored by Mike Gabriel's avatar Mike Gabriel

Add patch: 120_nxagent_libcairo-null-source-drawables.full.patch, solves crashes…

Add patch: 120_nxagent_libcairo-null-source-drawables.full.patch, solves crashes of GTK applications based on libcairo 1.12.1+.
parent 4372dfa5
nx-libs (2:3.5.0.13-0) UNRELEASED; urgency=low nx-libs (2:3.5.0.13-0) UNRELEASED; urgency=low
[ Mike Gabriel ]
* Let nxagent Debian package depend on xfonts-base. * Let nxagent Debian package depend on xfonts-base.
[ Jim Burnes ]
* Add patch: 120_nxagent_libcairo-null-source-drawables.full.patch, solves
crashes of GTK applications based on libcairo 1.12.1+.
-- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 07 Mar 2012 21:01:21 +0100 -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 07 Mar 2012 21:01:21 +0100
nx-libs (2:3.5.0.12-0) unstable; urgency=low nx-libs (2:3.5.0.12-0) unstable; urgency=low
......
--- a/nx-X11/programs/Xserver/hw/nxagent/Render.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Render.c
@@ -995,6 +995,36 @@
#endif
}
+
+int nxagentShouldDeferComposite(PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst)
+{
+
+int drawableDst;
+int linkDeferred;
+int unSyncedSrcMask;
+
+ drawableDst = ( nxagentRenderVersionMajor == 0 &&
+ nxagentRenderVersionMinor == 8 &&
+ (pDst) -> pDrawable -> type == DRAWABLE_PIXMAP
+ );
+
+ linkDeferred = ( nxagentOption(DeferLevel) >= 2 &&
+ nxagentOption(LinkType) < LINK_TYPE_ADSL
+ );
+
+ unSyncedSrcMask = ( nxagentOption(DeferLevel) == 1 &&
+ (pDst) -> pDrawable -> type == DRAWABLE_PIXMAP &&
+ (
+ (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)) ||
+ ((pMask) && pMask -> pDrawable && (nxagentDrawableStatus((pMask) -> pDrawable) == NotSynchronized))
+ )
+ );
+
+
+ return drawableDst || linkDeferred || unSyncedSrcMask;
+}
+
+
void nxagentComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pDst,
INT16 xSrc, INT16 ySrc, INT16 xMask, INT16 yMask, INT16 xDst,
INT16 yDst, CARD16 width, CARD16 height)
@@ -1036,8 +1066,8 @@
}
#endif
-
- if (NXAGENT_SHOULD_DEFER_COMPOSITE(pSrc, pMask, pDst))
+ /* if (NXAGENT_SHOULD_DEFER_COMPOSITE(pSrc, pMask, pDst)) */
+ if (nxagentShouldDeferComposite(pSrc, pMask, pDst))
{
pDstRegion = nxagentCreateRegion(pDst -> pDrawable, NULL, xDst, yDst, width, height);
@@ -1095,7 +1125,8 @@
}
}
- if (pMask != NULL && pMask -> pDrawable != pSrc -> pDrawable &&
+ if ((pMask) && (pMask->pDrawable) &&
+ pMask -> pDrawable != pSrc -> pDrawable &&
pMask -> pDrawable != pDst -> pDrawable)
{
nxagentSynchronizeShmPixmap(pMask -> pDrawable, xMask, yMask, width, height);
@@ -1259,7 +1290,7 @@
* on the real X server.
*/
- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
{
#ifdef TEST
fprintf(stderr, "nxagentGlyphs: Synchronizing source [%s] at [%p].\n",
@@ -1302,14 +1333,15 @@
nxagentSynchronizeBox(pSrc -> pDrawable, &glyphBox, NEVER_BREAK);
}
- if (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP)
+ if (pSrc -> pDrawable && (pSrc -> pDrawable -> type == DRAWABLE_PIXMAP))
{
nxagentIncreasePixmapUsageCounter((PixmapPtr) pSrc -> pDrawable);
}
}
- if (pSrc -> pDrawable != pDst -> pDrawable &&
- nxagentDrawableStatus(pDst -> pDrawable) == NotSynchronized)
+
+ if (pSrc -> pDrawable && (pSrc -> pDrawable != pDst -> pDrawable &&
+ nxagentDrawableStatus(pDst -> pDrawable) == NotSynchronized))
{
#ifdef TEST
fprintf(stderr, "nxagentGlyphs: Synchronizing destination [%s] at [%p].\n",
@@ -1749,7 +1781,9 @@
return;
}
- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+ /* the following blocks need fixing to ignore null values of pDrawable */
+
+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
{
#ifdef TEST
fprintf(stderr, "nxagentTrapezoids: Going to synchronize the source drawable at [%p].\n",
@@ -1843,7 +1877,9 @@
* operation like nxagentTrapezoids() does.
*/
- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+
+
+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
{
#ifdef TEST
fprintf(stderr, "nxagentTriangles: Going to synchronize the source drawable at [%p].\n",
@@ -1920,7 +1956,8 @@
* operation like nxagentTrapezoids() does.
*/
- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+
+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
{
#ifdef TEST
fprintf(stderr, "nxagentTriStrip: Going to synchronize the source drawable at [%p].\n",
@@ -1997,7 +2034,8 @@
* operation like nxagentTrapezoids() does.
*/
- if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+
+ if (pSrc -> pDrawable && (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized))
{
#ifdef TEST
fprintf(stderr, "nxagentTriFan: Going to synchronize the source drawable at [%p].\n",
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
108_nxagent_wine-close-delay.full.patch 108_nxagent_wine-close-delay.full.patch
109_nxagent_locale-utf8-compound-text.full.patch 109_nxagent_locale-utf8-compound-text.full.patch
110_nxagent_createpixmap-bounds-check.full.patch 110_nxagent_createpixmap-bounds-check.full.patch
120_nxagent_libcairo-null-source-drawables.full.patch
200_nxagent_check-binary-x2go-flavour.full.patch 200_nxagent_check-binary-x2go-flavour.full.patch
201_nxagent_set-x2go-icon-if-x2goagent-flavour.full.patch 201_nxagent_set-x2go-icon-if-x2goagent-flavour.full.patch
202_nx-x11_enable-xinerama.full.patch 202_nx-x11_enable-xinerama.full.patch
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment