diff options
author | Mihai Moldovan <ionic@ionic.de> | 2017-12-07 08:35:54 +0100 |
---|---|---|
committer | Mihai Moldovan <ionic@ionic.de> | 2017-12-07 08:35:54 +0100 |
commit | eb9618739d0fb99f4aca933750a9d65dbe02aefb (patch) | |
tree | a7d569f7de444d0acd8f4a09334eec35474f20a3 | |
parent | 5487d52fe1c37244c649c3aefb78600f08ffb91b (diff) | |
parent | ad53af097ca5ff3c4687ab7c93f776d482760ae8 (diff) | |
download | nx-libs-eb9618739d0fb99f4aca933750a9d65dbe02aefb.tar.gz nx-libs-eb9618739d0fb99f4aca933750a9d65dbe02aefb.tar.bz2 nx-libs-eb9618739d0fb99f4aca933750a9d65dbe02aefb.zip |
Merge branch 'uli42-p/xquerytree_leak' into 3.6.x
Attributes GH PR #588: https://github.com/ArcticaProject/nx-libs/pull/588
Fixes: ArcticaProject/nx-libs#585
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Events.c | 35 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Rootless.c | 5 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Window.c | 15 |
3 files changed, 28 insertions, 27 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c index e360d21f6..d1fdfd21e 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Events.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c @@ -417,6 +417,8 @@ void nxagentRemoteWindowInfo(Window win, int indent, Bool newLine) } } + +#ifdef DEBUG_TREE /* * Walk remote windows tree. */ @@ -426,13 +428,12 @@ void nxagentRemoteWindowsTree(Window window, int level) int i, j; unsigned long rootWin, parentWin; unsigned int numChildren; - unsigned long *childList; + unsigned long *childList = NULL; if (!XQueryTree(nxagentDisplay, window, &rootWin, &parentWin, &childList, &numChildren)) { fprintf(stderr, "nxagentRemoteWindowsTree - XQueryTree failed.\n"); - return; } @@ -481,6 +482,7 @@ void nxagentRemoteWindowsTree(Window window, int level) XFree((char *) childList); } } +#endif /* * Print info about internal window. @@ -3185,7 +3187,7 @@ int nxagentCheckWindowConfiguration(XConfigureEvent* X) #endif } - if (result && nchildren_return) + if (children_return) { XFree(children_return); } @@ -3540,6 +3542,12 @@ int nxagentHandleReparentNotify(XEvent* X) result = XQueryTree(nxagentDisplay, w, &root_return, &parent_return, &children_return, &nchildren_return); + if (children_return) + { + XFree(children_return); + children_return = NULL; + } + if (!result) { #ifdef WARNING @@ -3548,11 +3556,6 @@ int nxagentHandleReparentNotify(XEvent* X) break; } - - if (result && children_return) - { - XFree(children_return); - } } if (w && !nxagentWindowPtr(w)) @@ -3581,9 +3584,10 @@ int nxagentHandleReparentNotify(XEvent* X) #endif } - if (result && nchildren_return) + if (children_return) { XFree(children_return); + children_return = NULL; } } else @@ -3647,17 +3651,18 @@ int nxagentHandleReparentNotify(XEvent* X) { result = XQueryTree(nxagentDisplay, w, &rootReturn, &parentReturn, &childrenReturn, &nchildrenReturn); - - if (parentReturn == rootReturn || parentReturn == 0 || result == 0) + + if (childrenReturn) { - break; + XFree(childrenReturn); + childrenReturn = NULL; } - if (result == 1 && childrenReturn != NULL) + if (parentReturn == rootReturn || parentReturn == 0 || result == 0) { - XFree(childrenReturn); + break; } - + w = parentReturn; } while (True); diff --git a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c index f42f9d99d..437140f61 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Rootless.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Rootless.c @@ -249,9 +249,8 @@ Bool nxagentRootlessTreesMatch() { Window root_return; Window parent_return; - Window *children_return; + Window *children_return = NULL; unsigned int nChildrenReturn; - WindowPtr pW; WindowPtr pTestWin = screenInfo.screens[0]->root -> firstChild; Bool treesMatch = True; Status result; @@ -270,7 +269,7 @@ Bool nxagentRootlessTreesMatch() while (nChildrenReturn > 0) { - pW = nxagentWindowPtr(children_return[--nChildrenReturn]); + WindowPtr pW = nxagentWindowPtr(children_return[--nChildrenReturn]); if (!pW) { diff --git a/nx-X11/programs/Xserver/hw/nxagent/Window.c b/nx-X11/programs/Xserver/hw/nxagent/Window.c index 2fa6bc136..1cad4ca03 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Window.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Window.c @@ -1454,9 +1454,8 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask) { Window root_return; Window parent_return; - Window *children_return; + Window *children_return = NULL; unsigned int nchildren_return; - Window *pw; Status result; result = XQueryTree(nxagentDisplay, DefaultRootWindow(nxagentDisplay), @@ -1464,8 +1463,6 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask) if (result) { - pw = children_return; - fprintf(stderr, "nxagentConfigureWindow: Children of the root: "); while(nchildren_return > 0) { @@ -1476,16 +1473,16 @@ void nxagentConfigureWindow(WindowPtr pWin, unsigned int mask) } } fprintf(stderr, "\n"); - - if (children_return) - { - XFree(children_return); - } } else { fprintf(stderr, "nxagentConfigureWindow: Failed QueryTree request.\n "); } + + if (children_return) + { + XFree(children_return); + } } #endif } |