diff options
author | Timo Sirainen <cras@irssi.org> | 2001-10-21 13:59:07 +0000 |
---|---|---|
committer | cras <cras@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2001-10-21 13:59:07 +0000 |
commit | 1256621041e46c11a20646b389ba33192b054781 (patch) | |
tree | c846a6bb1fea5470b5d0666effc2d2a431ae379f /src/core/servers.c | |
parent | ae1b5b0d50b58a4230ce45a09c0ee98231d28f0e (diff) | |
download | irssi-1256621041e46c11a20646b389ba33192b054781.zip |
Added reference counter to SERVER_CONNECT_REC. Since it's being moved around
a lot in reconnects etc. this should make it easier to track when it's
supposed to be destroyed. Hopefully fixes a crash I assume is related to
this but couldn't find..
git-svn-id: http://svn.irssi.org/repos/irssi/trunk@1880 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/core/servers.c')
-rw-r--r-- | src/core/servers.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/core/servers.c b/src/core/servers.c index 6b6c8087..0c1bcc6f 100644 --- a/src/core/servers.c +++ b/src/core/servers.c @@ -59,7 +59,7 @@ void server_connect_failed(SERVER_REC *server, const char *msg) } MODULE_DATA_DEINIT(server); - server_connect_free(server->connrec); + server_connect_unref(server->connrec); g_free_not_null(server->nick); g_free(server->tag); g_free(server); @@ -361,7 +361,7 @@ void server_disconnect(SERVER_REC *server) g_source_remove(server->readtag); MODULE_DATA_DEINIT(server); - server_connect_free(server->connrec); + server_connect_unref(server->connrec); rawlog_destroy(server->rawlog); line_split_free(server->buffer); g_free_not_null(server->version); @@ -413,12 +413,25 @@ SERVER_REC *server_find_chatnet(const char *chatnet) return NULL; } -void server_connect_free(SERVER_CONNECT_REC *conn) +void server_connect_ref(SERVER_CONNECT_REC *conn) +{ + conn->refcount++; +} + +void server_connect_unref(SERVER_CONNECT_REC *conn) { g_return_if_fail(IS_SERVER_CONNECT(conn)); - signal_emit("server connect free", 1, conn); - g_free_not_null(conn->proxy); + if (--conn->refcount > 0) + return; + if (conn->refcount < 0) { + g_warning("Connection '%s' refcount = %d", + conn->tag, conn->refcount); + } + + CHAT_PROTOCOL(conn)->destroy_server_connect(conn); + + g_free_not_null(conn->proxy); g_free_not_null(conn->proxy_string); g_free_not_null(conn->proxy_password); |