summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimo Sirainen <cras@irssi.org>2000-07-30 17:19:16 +0000
committercras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564>2000-07-30 17:19:16 +0000
commit87a8f713443283600bf9f66e1f8a73c54284ab3a (patch)
treea5f7afb793649f8db7433f34bd619d09305da8c5
parent05cfbaf9d5b08f77adadf6d955c04f76c348aae7 (diff)
downloadirssi-87a8f713443283600bf9f66e1f8a73c54284ab3a.zip
Bugfixes for non-irc server handling.
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@550 dbcabf3a-b0e7-0310-adc4-f8d773084564
-rw-r--r--src/core/server.c2
-rw-r--r--src/fe-common/irc/irc-completion.c3
-rw-r--r--src/irc/core/channel-rejoin.c3
-rw-r--r--src/irc/core/channels-query.c6
-rw-r--r--src/irc/core/ctcp.c9
-rw-r--r--src/irc/core/irc-commands.c3
-rw-r--r--src/irc/core/irc.c10
-rw-r--r--src/irc/core/netsplit.c3
-rw-r--r--src/irc/core/server-idle.c3
9 files changed, 27 insertions, 15 deletions
diff --git a/src/core/server.c b/src/core/server.c
index 724f0d1c..33e79856 100644
--- a/src/core/server.c
+++ b/src/core/server.c
@@ -229,6 +229,8 @@ void server_disconnect(SERVER_REC *server)
if (server->handle != NULL)
net_sendbuffer_destroy(server->handle, TRUE);
+ if (server->readtag > 0)
+ g_source_remove(server->readtag);
MODULE_DATA_DEINIT(server);
rawlog_destroy(server->rawlog);
diff --git a/src/fe-common/irc/irc-completion.c b/src/fe-common/irc/irc-completion.c
index 401984e2..82025dfb 100644
--- a/src/fe-common/irc/irc-completion.c
+++ b/src/fe-common/irc/irc-completion.c
@@ -574,6 +574,9 @@ static void completion_deinit_server(IRC_SERVER_REC *server)
{
g_return_if_fail(server != NULL);
+ if (!irc_server_check(server))
+ return;
+
g_slist_foreach(server->lastmsgs, (GFunc) g_free, NULL);
g_slist_free(server->lastmsgs);
}
diff --git a/src/irc/core/channel-rejoin.c b/src/irc/core/channel-rejoin.c
index 89abae0c..b255e228 100644
--- a/src/irc/core/channel-rejoin.c
+++ b/src/irc/core/channel-rejoin.c
@@ -59,6 +59,9 @@ static void event_target_unavailable(const char *data, IRC_SERVER_REC *server)
static void sig_disconnected(IRC_SERVER_REC *server)
{
+ if (!irc_server_check(server))
+ return;
+
g_slist_foreach(server->rejoin_channels, (GFunc) g_free, NULL);
g_slist_free(server->rejoin_channels);
}
diff --git a/src/irc/core/channels-query.c b/src/irc/core/channels-query.c
index 95ab9ecd..2070e979 100644
--- a/src/irc/core/channels-query.c
+++ b/src/irc/core/channels-query.c
@@ -73,7 +73,8 @@ static void sig_connected(IRC_SERVER_REC *server)
SERVER_QUERY_REC *rec;
g_return_if_fail(server != NULL);
- if (!irc_server_check(server)) return;
+ if (!irc_server_check(server))
+ return;
rec = g_new0(SERVER_QUERY_REC, 1);
server->chanqueries = rec;
@@ -85,7 +86,8 @@ static void sig_disconnected(IRC_SERVER_REC *server)
int n;
g_return_if_fail(server != NULL);
- if (!irc_server_check(server)) return;
+ if (!irc_server_check(server))
+ return;
rec = server->chanqueries;
g_return_if_fail(rec != NULL);
diff --git a/src/irc/core/ctcp.c b/src/irc/core/ctcp.c
index 7daee3d9..c3173cb7 100644
--- a/src/irc/core/ctcp.c
+++ b/src/irc/core/ctcp.c
@@ -182,10 +182,13 @@ static void event_notice(const char *data, IRC_SERVER_REC *server, const char *n
g_free(params);
}
-static void ctcp_deinit_server(IRC_SERVER_REC *server)
+static void sig_disconnected(IRC_SERVER_REC *server)
{
g_return_if_fail(server != NULL);
+ if (!irc_server_check(server))
+ return;
+
g_slist_free(server->ctcpqueue);
}
@@ -194,7 +197,7 @@ void ctcp_init(void)
settings_add_str("misc", "ctcp_version_reply", PACKAGE" v$J - running on $sysname");
settings_add_int("flood", "max_ctcp_queue", 5);
- signal_add("server disconnected", (SIGNAL_FUNC) ctcp_deinit_server);
+ signal_add("server disconnected", (SIGNAL_FUNC) sig_disconnected);
signal_add_first("event privmsg", (SIGNAL_FUNC) event_privmsg);
signal_add_first("event notice", (SIGNAL_FUNC) event_notice);
signal_add("ctcp msg", (SIGNAL_FUNC) ctcp_msg);
@@ -206,7 +209,7 @@ void ctcp_init(void)
void ctcp_deinit(void)
{
- signal_remove("server disconnected", (SIGNAL_FUNC) ctcp_deinit_server);
+ signal_remove("server disconnected", (SIGNAL_FUNC) sig_disconnected);
signal_remove("event privmsg", (SIGNAL_FUNC) event_privmsg);
signal_remove("event notice", (SIGNAL_FUNC) event_notice);
signal_remove("ctcp msg", (SIGNAL_FUNC) ctcp_msg);
diff --git a/src/irc/core/irc-commands.c b/src/irc/core/irc-commands.c
index e1c1d317..323d922b 100644
--- a/src/irc/core/irc-commands.c
+++ b/src/irc/core/irc-commands.c
@@ -913,6 +913,9 @@ static void sig_server_disconnected(IRC_SERVER_REC *server)
{
g_return_if_fail(server != NULL);
+ if (!irc_server_check(server))
+ return;
+
while (server->knockoutlist != NULL)
knockout_destroy(server, server->knockoutlist->data);
}
diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c
index c58b5db1..692f5346 100644
--- a/src/irc/core/irc.c
+++ b/src/irc/core/irc.c
@@ -350,14 +350,6 @@ static void irc_init_server(IRC_SERVER_REC *server)
(GInputFunction) irc_parse_incoming, server);
}
-static void irc_deinit_server(IRC_SERVER_REC *server)
-{
- g_return_if_fail(server != NULL);
-
- if (server->readtag > 0)
- g_source_remove(server->readtag);
-}
-
#define isoptchan(a) \
(ischannel((a)[0]) || ((a)[0] == '*' && ((a)[1] == '\0' || (a)[1] == ' ')))
@@ -400,7 +392,6 @@ void irc_irc_init(void)
signal_add("server event", (SIGNAL_FUNC) irc_server_event);
signal_add("server connected", (SIGNAL_FUNC) irc_init_server);
- signal_add_first("server disconnected", (SIGNAL_FUNC) irc_deinit_server);
signal_add("server incoming", (SIGNAL_FUNC) irc_parse_incoming_line);
current_server_event = NULL;
@@ -414,7 +405,6 @@ void irc_irc_deinit(void)
{
signal_remove("server event", (SIGNAL_FUNC) irc_server_event);
signal_remove("server connected", (SIGNAL_FUNC) irc_init_server);
- signal_remove("server disconnected", (SIGNAL_FUNC) irc_deinit_server);
signal_remove("server incoming", (SIGNAL_FUNC) irc_parse_incoming_line);
module_uniq_destroy("IRC");
diff --git a/src/irc/core/netsplit.c b/src/irc/core/netsplit.c
index 6fec71a5..78f1f02c 100644
--- a/src/irc/core/netsplit.c
+++ b/src/irc/core/netsplit.c
@@ -284,6 +284,9 @@ static void sig_disconnected(IRC_SERVER_REC *server)
{
g_return_if_fail(server != NULL);
+ if (!irc_server_check(server))
+ return;
+
g_hash_table_foreach(server->splits, (GHFunc) netsplit_destroy_hash, server);
g_hash_table_destroy(server->splits);
}
diff --git a/src/irc/core/server-idle.c b/src/irc/core/server-idle.c
index 74e1164a..1f4b7858 100644
--- a/src/irc/core/server-idle.c
+++ b/src/irc/core/server-idle.c
@@ -217,6 +217,9 @@ static void sig_disconnected(IRC_SERVER_REC *server)
{
g_return_if_fail(server != NULL);
+ if (!irc_server_check(server))
+ return;
+
while (server->idles != NULL)
server_idle_destroy(server, server->idles->data);
}