mirror of
https://github.com/weechat/weechat.git
synced 2026-06-30 06:46:38 +02:00
irc: fix crash on /upgrade (free channels before server data when a server is destroyed) (bug #37736)
This commit is contained in:
@@ -838,7 +838,10 @@ irc_channel_free (struct t_irc_server *server, struct t_irc_channel *channel)
|
||||
if (channel->next_channel)
|
||||
(channel->next_channel)->prev_channel = channel->prev_channel;
|
||||
|
||||
/* free data */
|
||||
/* free linked lists */
|
||||
irc_nick_free_all (server, channel);
|
||||
|
||||
/* free channel data */
|
||||
if (channel->name)
|
||||
free (channel->name);
|
||||
if (channel->topic)
|
||||
@@ -847,7 +850,6 @@ irc_channel_free (struct t_irc_server *server, struct t_irc_channel *channel)
|
||||
free (channel->modes);
|
||||
if (channel->key)
|
||||
free (channel->key);
|
||||
irc_nick_free_all (server, channel);
|
||||
if (channel->away_message)
|
||||
free (channel->away_message);
|
||||
if (channel->pv_remote_nick_color)
|
||||
|
||||
@@ -1338,7 +1338,21 @@ irc_server_free_data (struct t_irc_server *server)
|
||||
if (!server)
|
||||
return;
|
||||
|
||||
/* free data */
|
||||
/* free linked lists */
|
||||
for (i = 0; i < IRC_SERVER_NUM_OUTQUEUES_PRIO; i++)
|
||||
{
|
||||
irc_server_outqueue_free_all (server, i);
|
||||
}
|
||||
irc_redirect_free_all (server);
|
||||
irc_notify_free_all (server);
|
||||
irc_channel_free_all (server);
|
||||
|
||||
/* free hashtables */
|
||||
weechat_hashtable_free (server->join_manual);
|
||||
weechat_hashtable_free (server->join_channel_key);
|
||||
weechat_hashtable_free (server->join_noswitch);
|
||||
|
||||
/* free server data */
|
||||
for (i = 0; i < IRC_SERVER_NUM_OPTIONS; i++)
|
||||
{
|
||||
if (server->options[i])
|
||||
@@ -1389,17 +1403,6 @@ irc_server_free_data (struct t_irc_server *server)
|
||||
regfree (server->cmd_list_regexp);
|
||||
free (server->cmd_list_regexp);
|
||||
}
|
||||
for (i = 0; i < IRC_SERVER_NUM_OUTQUEUES_PRIO; i++)
|
||||
{
|
||||
irc_server_outqueue_free_all (server, i);
|
||||
}
|
||||
irc_notify_free_all (server);
|
||||
weechat_hashtable_free (server->join_manual);
|
||||
weechat_hashtable_free (server->join_channel_key);
|
||||
weechat_hashtable_free (server->join_noswitch);
|
||||
irc_redirect_free_all (server);
|
||||
if (server->channels)
|
||||
irc_channel_free_all (server);
|
||||
if (server->buffer_as_string)
|
||||
free (server->buffer_as_string);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user