(popup_messages): Always destroy `msg' and `lead' strings, avoiding a
authorBen Pfaff <blp@gnu.org>
Wed, 20 Feb 2008 04:24:29 +0000 (04:24 +0000)
committerBen Pfaff <blp@gnu.org>
Wed, 20 Feb 2008 04:24:29 +0000 (04:24 +0000)
memory leak.  Thanks to John Darrington for reporting the problem.

src/ui/gui/ChangeLog
src/ui/gui/message-dialog.c

index 23004c9ad23a1959edc4905b3a0174fd7928cd5b..e414a71b8559add5a9bface0aaf6fe06c3fc175e 100644 (file)
@@ -1,3 +1,9 @@
+2008-02-19  Ben Pfaff  <blp@gnu.org>
+
+       * message-dialog.c (popup_messages): Always destroy `msg' and
+       `lead' strings, avoiding a memory leak.  Thanks to John Darrington
+       for reporting the problem.
+
 2008-02-19  John Darrington <john@darrington.wattle.id.au>
 
        * dict-display.c: Display names of variables in dialog box
index 525fca40e22894b6ff70823efa359cf56499d153..75f8cfdcbcf74de07fa2228ccc588b2b69747a9f 100644 (file)
@@ -189,7 +189,8 @@ popup_messages (gpointer unused UNUSED)
   GtkTextIter end;
   GtkTextView *text_view;
   GtkLabel *label;
-  struct string lead, msg;
+  struct string lead = DS_EMPTY_INITIALIZER;
+  struct string msg = DS_EMPTY_INITIALIZER;
   int message_cnt;
 
   /* If a pointer grab is in effect, then the combination of that, and
@@ -201,7 +202,6 @@ popup_messages (gpointer unused UNUSED)
 
   /* Compose the lead-in. */
   message_cnt = error_cnt + warning_cnt + note_cnt;
-  ds_init_empty (&lead);
   if (dropped_messages == 0)
     ds_put_format (
       &lead,
@@ -227,7 +227,6 @@ popup_messages (gpointer unused UNUSED)
 
 
   /* Compose the messages. */
-  ds_init_empty (&msg);
   while (!g_queue_is_empty (early_queue))
     format_message (g_queue_pop_head (early_queue), &msg);
   if (dropped_messages)
@@ -246,7 +245,6 @@ popup_messages (gpointer unused UNUSED)
   text_buffer = gtk_text_buffer_new (NULL);
   gtk_text_buffer_get_end_iter (text_buffer, &end);
   gtk_text_buffer_insert (text_buffer, &end, ds_data (&msg), ds_length (&msg));
-  ds_destroy (&msg);
 
   label = GTK_LABEL (get_widget_assert (message_xml, "lead-in"));
   if (label == NULL)
@@ -261,6 +259,9 @@ popup_messages (gpointer unused UNUSED)
   gtk_dialog_run (message_dialog);
   gtk_widget_hide (GTK_WIDGET (message_dialog));
 
+  ds_destroy (&lead);
+  ds_destroy (&msg);
+
   return FALSE;
 
 use_fallback: