mirror of
https://github.com/irssi/irssi.git
synced 2026-08-20 00:52:30 +02:00
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
This commit is contained in:
parent
ae1b5b0d50
commit
1256621041
10 changed files with 79 additions and 38 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue