diff --git a/src/core/channels.c b/src/core/channels.c index 06bf0c41..1884c402 100644 --- a/src/core/channels.c +++ b/src/core/channels.c @@ -64,7 +64,7 @@ void channel_destroy(CHANNEL_REC *channel) channel->destroying = TRUE; channels = g_slist_remove(channels, channel); - if (channel->server != NULL) + if (!channel->server->disconnected) channel->server->channels = g_slist_remove(channel->server->channels, channel); signal_emit("channel destroyed", 1, channel); diff --git a/src/core/servers.c b/src/core/servers.c index a5a8c701..f99b238f 100644 --- a/src/core/servers.c +++ b/src/core/servers.c @@ -331,7 +331,6 @@ static int server_remove_channels(SERVER_REC *server) for (tmp = server->channels; tmp != NULL; tmp = tmp->next) { CHANNEL_REC *channel = tmp->data; - channel->server = NULL; channel_destroy(channel); found = TRUE; } diff --git a/src/fe-common/core/fe-channels.c b/src/fe-common/core/fe-channels.c index ec5d395b..712ae1c4 100644 --- a/src/fe-common/core/fe-channels.c +++ b/src/fe-common/core/fe-channels.c @@ -67,7 +67,7 @@ static void signal_channel_destroyed(CHANNEL_REC *channel) window_item_destroy((WI_ITEM_REC *) channel); if (channel->joined && !channel->left && - channel->server != NULL) { + !channel->server->disconnected) { /* kicked out from channel */ window_bind_add(window, channel->server->tag, channel->name); diff --git a/src/irc/core/channel-rejoin.c b/src/irc/core/channel-rejoin.c index 174c1c4e..582f1d0c 100644 --- a/src/irc/core/channel-rejoin.c +++ b/src/irc/core/channel-rejoin.c @@ -162,7 +162,7 @@ static void sig_remove_rejoin(IRC_CHANNEL_REC *channel) { REJOIN_REC *rec; - if (!IS_IRC_CHANNEL(channel) || channel->server == NULL) + if (!IS_IRC_CHANNEL(channel)) return; rec = rejoin_find(channel->server, channel->name); diff --git a/src/irc/core/channels-query.c b/src/irc/core/channels-query.c index 06cfdb3a..bc5ebf3a 100644 --- a/src/irc/core/channels-query.c +++ b/src/irc/core/channels-query.c @@ -132,7 +132,7 @@ static void sig_channel_destroyed(IRC_CHANNEL_REC *channel) { g_return_if_fail(channel != NULL); - if (IS_IRC_CHANNEL(channel) && channel->server != NULL && + if (IS_IRC_CHANNEL(channel) && !channel->server->disconnected && !channel->synced) query_remove_all(channel); } diff --git a/src/irc/core/irc-channels.c b/src/irc/core/irc-channels.c index 75741355..59726d22 100644 --- a/src/irc/core/irc-channels.c +++ b/src/irc/core/irc-channels.c @@ -192,7 +192,7 @@ static void sig_channel_destroyed(IRC_CHANNEL_REC *channel) if (!IS_IRC_CHANNEL(channel)) return; - if (channel->server != NULL && !channel->left && !channel->kicked) { + if (!channel->server->disconnected && !channel->left && !channel->kicked) { /* destroying channel record without actually having left the channel yet */ signal_emit("command part", 3, "", channel->server, channel);