]> git.sur5r.net Git - i3/i3/commitdiff
manage.c: fix memory leak
authorMichael Stapelberg <michael@stapelberg.de>
Sat, 9 Jan 2016 15:34:41 +0000 (16:34 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 9 Jan 2016 16:06:58 +0000 (17:06 +0100)
src/manage.c

index d6a8c6d3b36570543d7e611bcdfa308629516f21..8e68c51eef17909d8314435d51b09ee85a3af29e 100644 (file)
@@ -242,6 +242,7 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
 
     /* See if any container swallows this new window */
     nc = con_for_window(search_at, cwindow, &match);
+    const bool match_from_restart_mode = (match && match->restart_mode);
     if (nc == NULL) {
         /* If not, check if it is assigned to a specific workspace */
         if ((assignment = assignment_for(cwindow, A_TO_WORKSPACE))) {
@@ -291,6 +292,7 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
             DLOG("Removing match %p from container %p\n", match, nc);
             TAILQ_REMOVE(&(nc->swallow_head), match, matches);
             match_free(match);
+            FREE(match);
         }
     }
 
@@ -344,14 +346,17 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
             Con *target_output = con_get_output(ws);
 
             if (workspace_is_visible(ws) && current_output == target_output) {
-                if (!match || !match->restart_mode) {
+                if (!match_from_restart_mode) {
                     set_focus = true;
-                } else
+                } else {
                     DLOG("not focusing, matched with restart_mode == true\n");
-            } else
+                }
+            } else {
                 DLOG("workspace not visible, not focusing\n");
-        } else
+            }
+        } else {
             DLOG("dock, not focusing\n");
+        }
     } else {
         DLOG("fs = %p, ws = %p, not focusing\n", fs, ws);
         /* Insert the new container in focus stack *after* the currently