summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2013-02-07 22:11:25 +0100
committerSebastien Helleu <flashcode@flashtux.org>2013-02-07 22:11:25 +0100
commitd4b1b50311eca979928d32e209c888be7d187977 (patch)
tree6f7f24e5646d6a735a2cf8f35785c676f146375f /src
parente4149b073dd4c00c5dbd5733e8c26c2738c99fd5 (diff)
downloadweechat-d4b1b50311eca979928d32e209c888be7d187977.zip
core: fix structures before buffer data when a buffer is closed
This was causing a bug in relay plugin (weechat protocol): when a buffer was closed, local variables were removed after buffer name, and when signal is sent to client, the buffer name was wrong (already freed).
Diffstat (limited to 'src')
-rw-r--r--src/gui/gui-buffer.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c
index 98a400222..e5ec36266 100644
--- a/src/gui/gui-buffer.c
+++ b/src/gui/gui-buffer.c
@@ -2203,6 +2203,18 @@ gui_buffer_close (struct t_gui_buffer *buffer)
free (buffer->mixed_lines);
/* free some data */
+ gui_buffer_undo_free_all (buffer);
+ gui_history_buffer_free (buffer);
+ if (buffer->completion)
+ gui_completion_free (buffer->completion);
+ gui_nicklist_remove_all (buffer);
+ gui_nicklist_remove_group (buffer, buffer->nicklist_root);
+ if (buffer->hotlist_max_level_nicks)
+ hashtable_free (buffer->hotlist_max_level_nicks);
+ gui_key_free_all (&buffer->keys, &buffer->last_key,
+ &buffer->keys_count);
+ gui_buffer_local_var_remove_all (buffer);
+ hashtable_free (buffer->local_variables);
if (buffer->plugin_name_for_upgrade)
free (buffer->plugin_name_for_upgrade);
if (buffer->name)
@@ -2215,16 +2227,10 @@ gui_buffer_close (struct t_gui_buffer *buffer)
free (buffer->title);
if (buffer->input_buffer)
free (buffer->input_buffer);
- gui_buffer_undo_free_all (buffer);
if (buffer->input_undo_snap)
free (buffer->input_undo_snap);
- if (buffer->completion)
- gui_completion_free (buffer->completion);
- gui_history_buffer_free (buffer);
if (buffer->text_search_input)
free (buffer->text_search_input);
- gui_nicklist_remove_all (buffer);
- gui_nicklist_remove_group (buffer, buffer->nicklist_root);
if (buffer->highlight_words)
free (buffer->highlight_words);
if (buffer->highlight_regex)
@@ -2238,12 +2244,6 @@ gui_buffer_close (struct t_gui_buffer *buffer)
free (buffer->highlight_tags);
if (buffer->highlight_tags_array)
string_free_split (buffer->highlight_tags_array);
- if (buffer->hotlist_max_level_nicks)
- hashtable_free (buffer->hotlist_max_level_nicks);
- gui_key_free_all (&buffer->keys, &buffer->last_key,
- &buffer->keys_count);
- gui_buffer_local_var_remove_all (buffer);
- hashtable_free (buffer->local_variables);
/* remove buffer from buffers list */
if (buffer->prev_buffer)