Commit e2e7008b authored by Mike Gabriel's avatar Mike Gabriel

New upstream release of nxagent (3.5.0-9).

* New upstream release of nxagent (3.5.0-9). * Adapt patch series (all hunks succeeded automatically). * Drop patch: 120_nxagent_libcairo-null-source-drawables.full.patch, the issue has been fixed by NoMachine (TR05J02703).
parent fdaa2404
nx-libs (2:3.5.0.14-0) UNRELEASED; urgency=low
* Continue development...
* New upstream release of nxagent (3.5.0-9).
* Adapt patch series (all hunks succeeded automatically).
* Drop patch: 120_nxagent_libcairo-null-source-drawables.full.patch, the issue
has been fixed by NoMachine (TR05J02703).
-- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Fri, 11 May 2012 23:57:18 +0200
......
......@@ -17,7 +17,7 @@ Last-Update: 2011-12-31
/*
* Set here the required log level.
*/
@@ -348,6 +351,20 @@
@@ -366,6 +369,20 @@
*/
blackRoot = TRUE;
......
Description: Fix nxagent/x2goagent With New LibCairo (>1.12.1)
Quoting two postings of Jim Burnes <jvburnes@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@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",
......@@ -9,7 +9,7 @@ Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>
Last-Update: 2012-01-11
--- a/nx-X11/programs/Xserver/hw/nxagent/Init.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c
@@ -178,6 +178,29 @@
@@ -180,6 +180,29 @@
int nxagentDoFullGeneration = 1;
......@@ -39,7 +39,7 @@ Last-Update: 2012-01-11
/*
* Called at X server's initialization.
*/
@@ -194,6 +217,11 @@
@@ -196,6 +219,11 @@
#endif
/*
......
......@@ -4,9 +4,9 @@ Description: X2Go icon when run with x2goagent flavour
Forwarded: not-needed
Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>
Last-Update: 2012-01-11
--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c 2012-01-11 10:09:05.000000000 +0100
+++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c 2012-01-11 12:28:11.000000000 +0100
@@ -77,6 +77,7 @@ is" without express or implied warranty.
--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c
@@ -77,6 +77,7 @@
#include "NXlib.h"
#include NXAGENT_ICON_NAME
......@@ -14,7 +14,7 @@ Last-Update: 2012-01-11
/*
* Set here the required log level.
@@ -1918,12 +1919,29 @@ Bool nxagentMakeIcon(Display *display, P
@@ -1941,12 +1942,29 @@
Bool success = False;
XlibPixmap IconPixmap;
XlibPixmap IconShape;
......@@ -46,7 +46,7 @@ Last-Update: 2012-01-11
if (icon_fp != NULL)
{
@@ -1962,7 +1980,7 @@ Bool nxagentMakeIcon(Display *display, P
@@ -1985,7 +2003,7 @@
{
status = XpmCreatePixmapFromData(display,
DefaultRootWindow(display),
......@@ -55,8 +55,8 @@ Last-Update: 2012-01-11
&IconPixmap,
&IconShape,
NULL);
--- a/nx-X11/programs/Xserver/hw/nxagent/Icons.h 2012-01-11 10:09:05.000000000 +0100
+++ b/nx-X11/programs/Xserver/hw/nxagent/Icons.h 2012-01-11 12:17:21.000000000 +0100
--- a/nx-X11/programs/Xserver/hw/nxagent/Icons.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Icons.h
@@ -24,6 +24,8 @@
#define NXAGENT_ICON_NAME "nxagent.xpm"
......@@ -66,8 +66,8 @@ Last-Update: 2012-01-11
#define NXAGENT_PLACEHOLDER_NAME "nxmissing.xpm"
#endif /* __Icons_H__ */
--- a/nx-X11/programs/Xserver/hw/nxagent/x2go.xpm 1970-01-01 01:00:00.000000000 +0100
+++ b/nx-X11/programs/Xserver/hw/nxagent/x2go.xpm 2012-01-11 12:26:24.000000000 +0100
--- /dev/null
+++ b/nx-X11/programs/Xserver/hw/nxagent/x2go.xpm
@@ -0,0 +1,148 @@
+/* XPM */
+static char *x2goagentIconData[]={
......@@ -217,4 +217,3 @@ Last-Update: 2012-01-11
+"..#cccbne.............................................................................................................menkccc#..",
+"...okccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbe...",
+"....mhjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccg#....."};
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -656,6 +656,12 @@
@@ -672,6 +672,12 @@
return 1;
}
......@@ -13,7 +13,7 @@
if (!strcmp(argv[i], "-noonce"))
{
nxagentOnce = False;
@@ -1837,6 +1843,7 @@
@@ -1855,6 +1861,7 @@
ErrorF("The NX system adds the following arguments:\n");
ErrorF("-forcenx force use of NX protocol messages assuming communication through nxproxy\n");
ErrorF("-timeout int auto-disconnect timeout in seconds (minimum allowed: 60)\n");
......@@ -23,7 +23,7 @@
ErrorF("-nocomposite disable the use of the composite extension\n");
--- a/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
@@ -217,7 +217,7 @@
@@ -219,7 +219,7 @@
if (nxagentOption(Rootless) &&
nxagentLastWindowDestroyed && nxagentRootlessDialogPid == 0 &&
......@@ -44,9 +44,9 @@
nxagentOptions.Y = 0;
--- a/nx-X11/programs/Xserver/hw/nxagent/Options.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Options.h
@@ -369,6 +369,13 @@
@@ -381,6 +381,13 @@
int CopyBufferSize;
int ImageRateLimit;
+ /*
+ * True if agent should not exit if there are no
......
......@@ -15,7 +15,7 @@ Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>
Last-Update: 2012-01-11
--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
@@ -1756,6 +1756,42 @@
@@ -1759,6 +1759,42 @@
nxagentDefaultWindows[pScreen->myNum]);
#endif
......
......@@ -230,7 +230,7 @@ Last-Update: 2012-01-11
#ifdef NXAGENT_LOGO_DEBUG
--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c
@@ -1403,22 +1403,10 @@
@@ -1430,22 +1430,10 @@
g = pV.green_mask;
b = pV.blue_mask;
......@@ -257,7 +257,7 @@ Last-Update: 2012-01-11
#ifdef WATCH
@@ -2673,22 +2661,10 @@
@@ -2696,22 +2684,10 @@
g = pV.green_mask;
b = pV.blue_mask;
......
......@@ -35,7 +35,6 @@
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
......
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