[X2go-Commits] nx-libs.git - build-main (branch) updated: redist-server/3.5.0.13

X2Go dev team git-admin at x2go.org
Fri May 11 23:54:24 CEST 2012


The branch, build-main has been updated
       via  789c758510fc661b9d1a297ff5284962c5e944f0 (commit)
       via  3511e8791bd03a3e54384bdfd19e145efb4a136b (commit)
       via  45311f783acad296d37a248fb2c702c578ac3059 (commit)
       via  4372dfa53207a3247b8c317392f2672191b54fdf (commit)
       via  fc87c4fbb2a2ce73c56be8fe59bcad05df359d4e (commit)
       via  ab04ba2175ce37efb83d914792d2755b57cba2d5 (commit)
       via  30110dd4a80fb38e670296ad4fcbd43c2a4f184e (commit)
      from  1b1a26ae66725db1d8e8a3b3b5b3f755457f5068 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 debian/changelog                                   |   11 +
 debian/control                                     |    1 +
 ...agent_libcairo-null-source-drawables.full.patch |  193 ++++++++++++++++++++
 debian/patches/series                              |    1 +
 4 files changed, 206 insertions(+), 0 deletions(-)
 create mode 100644 debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index d1c14d8..a5c0844 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+nx-libs (2:3.5.0.13-0) unstable; urgency=low
+
+  [ Mike Gabriel ]
+  * 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 at das-netzwerkteam.de>  Fri, 11 May 2012 23:51:35 +0200
+
 nx-libs (2:3.5.0.12-0) unstable; urgency=low
 
   [ Mike Gabriel ]
diff --git a/debian/control b/debian/control
index b23ecc2..16f25d7 100644
--- a/debian/control
+++ b/debian/control
@@ -74,6 +74,7 @@ Package: nxagent
 Architecture: any
 Depends:
  libnx-x11 (>= ${source:Version}), libnx-x11 (<< ${source:Version}.1~),
+ xfonts-base,
  ${shlibs:Depends},
  ${misc:Depends}
 Description: NX agent
diff --git a/debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch b/debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch
new file mode 100644
index 0000000..319f6ed
--- /dev/null
+++ b/debian/patches/120_nxagent_libcairo-null-source-drawables.full.patch
@@ -0,0 +1,193 @@
+Description: Fix nxagent/x2goagent With New LibCairo (>1.12.1)
+ Quoting two postings of Jim Burnes <jvburnes at gmail.com> on x2go-dev ML:
+
+ I don't know what the current patch status is for fixing nxagent with the
+ new libcairo (1.12.1+ I believe), but eventually I got tired of waiting and
+ created my own patches for nxagent/x2goagent.
+
+ Most of the fixes were required because the render extension now allows
+ (and libcairo uses) null source drawables (for gradients etc), null masks
+ and null mask drawables.
+
+ This change creates a bit of a logic mess in the code.   Previous patches
+ to the code tried to account for all of the possibilities, but fell a
+ little short.
+
+ Consider this an alpha-quality patch.  I've only tested it in KDE while
+ running GTK applications.   All my favorite GTK apps like Firefox, Emacs,
+ rox-filer and all my other GTK apps that were broken are now working just
+ fine.  (Though I'm getting only the standard GTK look and feel - don't know
+ if that's caused by anything I've done.)
+
+ Could someone test this under Gnome?
+
+ Also, since I'm not primarily an X software engineer I'd like a specialist
+ to take a look at it.   The fix is a little crude.   I just attached to the
+ x2goagent process and fixed the lines that caused segfaults.   (About 10 of
+ them).
+
+ I also rewrote one of the macros in Pixels.h into a local subroutine in
+ Render.c.  It had a bug in it and complex macro bugs are a PITA to debug in
+ gdb (or anything else really).   The macro is only used in one place and
+ although the code in the macro is called pretty often, it's very likely
+ that the compiler would inline it anyway.  The rewrite increases
+ readability by a large factor.
+
+ A better patch could be created by someone that understands nxagent and X
+ much better.   The render extension code receives render ops from X client
+ programs.  The render ops can contain any combination of picture source,
+ picture destination and picture mask.  It's apparently legal to send render
+ ops with combinations of null picture source drawables, picture masks and
+ picture mask drawables.   A better way to patch this would be to simply
+ perform a return on all the illegal combinations of null parameters for the
+ render ops.  That way you wouldn't have to keep re-checking the parameter
+ values.
+
+ So anyway, here it is.  I appreciate it if someone out there would test it
+ and let me know.   Also if anyone knows of the X docs which discuss null
+ picture sources and masks in the render extension I'd be glad to create a
+ cleaner patch that conforms to the stands.
+
+
+ You can reproduce the issue by running any recent copy of x2go/nxagent and
+ start any program that uses very recent versions of libCairo.  Things
+ started breaking for both ArchLinux and Debian SID users about 3 weeks ago.
+
+ The issues started with versions of libCairo >= libcairo2_1.12.0-2_amd64
+ (debian packages of course).  These versions of Cairo seem to use null
+ parameters in render ops a lot.   Users of recent GTK environments would
+ have the startup process just crash.  KDE sessions start and run fine until
+ you start a gtk app.
+Forwarded: pending
+Author: Jim Burnes <jvburnes at gmail.com>
+Last-Update: 2012-05-11
+--- 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",
diff --git a/debian/patches/series b/debian/patches/series
index dc42d85..0e7726a 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -35,6 +35,7 @@
 108_nxagent_wine-close-delay.full.patch
 109_nxagent_locale-utf8-compound-text.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
 201_nxagent_set-x2go-icon-if-x2goagent-flavour.full.patch
 202_nx-x11_enable-xinerama.full.patch


hooks/post-receive
-- 
nx-libs.git (NX (redistributed))

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "nx-libs.git" (NX (redistributed)).




More information about the x2go-commits mailing list