1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-01 15:26:37 +02:00

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).
This commit is contained in:
Sebastien Helleu
2013-02-07 22:11:25 +01:00
parent e4149b073d
commit d4b1b50311
2 changed files with 13 additions and 12 deletions
+1
View File
@@ -7,6 +7,7 @@ v0.4.1-dev, 2013-02-07
Version 0.4.1 (under dev!)
--------------------------
* core: fix structures before buffer data when a buffer is closed
* core: fix refresh of line after changes with hdata_update (update flag
"displayed" according to filters)
* core: fix detection of python on Ubuntu Raring
+12 -12
View File
@@ -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)