home · contact · privacy
Removed memory leak in client's reset_windows(). (Previously, not all Win
authorChristian Heller <c.heller@plomlompom.de>
Wed, 22 Jan 2014 23:37:35 +0000 (00:37 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 22 Jan 2014 23:37:35 +0000 (00:37 +0100)
structs were freed; only those visible.)

src/client/misc.c
src/client/wincontrol.c
src/client/wincontrol.h

index 7022c6f25c751945dc9b0ea746e16212d49c8767..01cf1d2e7ab68962fdaca3af4db42e9cc297f83c 100644 (file)
@@ -11,7 +11,8 @@
 #include "map_window.h" /* for map_center() */
 #include "wincontrol.h" /* struct WinConf, init_winconfs(), init_wins(),
                          * sorted_wintoggle_and_activate(), get_win_by_id(),
-                         * get_winconf_by_win(), toggle_window()
+                         * get_winconf_by_win(), toggle_window(),
+                         * get_next_winconf_id()
                          */
 #include "windows.h" /* struct Win, make_pad(), suspend_win(), free_win() */
 #include "world.h" /* global world */
@@ -86,7 +87,11 @@ extern void reset_windows()
     {
         w_p = world.wmeta.active;
         suspend_win(w_p);
-        free_win(w_p);
+    }
+    char id;
+    while (0 != (id = get_next_winconf_id()))
+    {
+        free_win(get_win_by_id(id));
     }
     delwin(world.wmeta.pad);
     make_pad();
index 5e818badd0b3d21d473b992e27ec4504defd94dc..01b9be84d50f74099b512c0e9688d28be9a777aa 100644 (file)
@@ -56,9 +56,6 @@ static struct WinConf * get_winconf_by_id(char id);
 /* Get (Win->draw) function identified by "c"; NULL if c not mapped to one. */
 static void * get_drawfunc_by_char(char c);
 
-/* Iterate over chars of world.winconf_db.winconf_ids array. Restart after \0.*/
-static char get_next_winconf_id();
-
 
 
 static char * string_prefixed_id(char * prefix, char id)
@@ -287,21 +284,6 @@ static void * get_drawfunc_by_char(char c)
 
 
 
-static char get_next_winconf_id()
-{
-    static uint8_t i = 0;
-    char c = world.winconf_db.winconf_ids[i];
-    if (0 == c)
-    {
-        i = 0;
-        return c;
-    }
-    i++;
-    return c;
-}
-
-
-
 extern struct WinConf * get_winconf_by_win(struct Win * win)
 {
     uint8_t i = 0;
@@ -428,6 +410,21 @@ extern void sorted_wintoggle_and_activate()
 
 
 
+extern char get_next_winconf_id()
+{
+    static uint8_t i = 0;
+    char c = world.winconf_db.winconf_ids[i];
+    if (0 == c)
+    {
+        i = 0;
+        return c;
+    }
+    i++;
+    return c;
+}
+
+
+
 extern void save_win_configs()
 {
     char * f_name = "save_win_configs()";
index 778e34f8ac74691e0c0c43c5b015409eb98ecaad..e025cced8705030596745efbb974131fa5e2e7b0 100644 (file)
@@ -59,6 +59,9 @@ extern void init_wins();
  */
 extern void sorted_wintoggle_and_activate();
 
+/* Iterate over chars of world.winconf_db.winconf_ids array. Restart after \0.*/
+extern char get_next_winconf_id();
+
 /* Save world.winconfs, visible window chain and active window selection to the
  * respective configuration files in client config windows directory.
  */