From 7d48855077703d3537aee39f16634cc06f2ec272 Mon Sep 17 00:00:00 2001 From: Christophe CURIS Date: Tue, 20 May 2014 21:46:37 +0200 Subject: [PATCH] WMaker: fix memory leak in workspace switching (Coverity #50126) As pointed by Coverity, if there's no window to unmap in a workspace, then the array used to build the list of the windows to be unmapped for workspace change would not be freed. Signed-off-by: Christophe CURIS --- src/workspace.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/workspace.c b/src/workspace.c index b0c436d0..d58f9046 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -472,8 +472,6 @@ void wWorkspaceRelativeChange(WScreen * scr, int amount) void wWorkspaceForceChange(WScreen * scr, int workspace) { WWindow *tmp, *foc = NULL, *foc2 = NULL; - WWindow **toUnmap; - int toUnmapSize, toUnmapCount; if (workspace >= MAX_WORKSPACES || workspace < 0) return; @@ -492,16 +490,19 @@ void wWorkspaceForceChange(WScreen * scr, int workspace) wWorkspaceMenuUpdate(w_global.clip.ws_menu); - toUnmapSize = 16; - toUnmapCount = 0; - toUnmap = wmalloc(toUnmapSize * sizeof(WWindow *)); - if ((tmp = scr->focused_window) != NULL) { + WWindow **toUnmap; + int toUnmapSize, toUnmapCount; + if ((IS_OMNIPRESENT(tmp) && (tmp->flags.mapped || tmp->flags.shaded) && !WFLAGP(tmp, no_focusable)) || tmp->flags.changing_workspace) { foc = tmp; } + toUnmapSize = 16; + toUnmapCount = 0; + toUnmap = wmalloc(toUnmapSize * sizeof(WWindow *)); + /* foc2 = tmp; will fix annoyance with gnome panel * but will create annoyance for every other application */ -- 2.11.4.GIT