From 6900d52d805149977d2f2ff0f8c2433169f21e31 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Wed, 17 Oct 2012 00:52:19 +0300 Subject: jabber: fix crash when disconnection timeout is reached --- src/jabber.c | 15 ++++++++------- src/jabber.h | 1 + src/profanity.c | 1 + 3 files changed, 10 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/jabber.c b/src/jabber.c index da606132..a326ce56 100644 --- a/src/jabber.c +++ b/src/jabber.c @@ -243,6 +243,14 @@ jabber_get_jid(void) return xmpp_conn_get_jid(jabber_conn.conn); } +void +jabber_free_resources(void) +{ + xmpp_conn_release(jabber_conn.conn); + xmpp_ctx_free(jabber_conn.ctx); + xmpp_shutdown(); +} + static int _message_handler(xmpp_conn_t * const conn, xmpp_stanza_t * const stanza, void * const userdata) @@ -306,13 +314,6 @@ _connection_handler(xmpp_conn_t * const conn, // received close stream response from server after disconnect if (jabber_conn.conn_status == JABBER_DISCONNECTING) { - // free memory for connection object and context - xmpp_conn_release(jabber_conn.conn); - xmpp_ctx_free(jabber_conn.ctx); - - // shutdown libstrophe - xmpp_shutdown(); - jabber_conn.conn_status = JABBER_DISCONNECTED; jabber_conn.presence = PRESENCE_OFFLINE; diff --git a/src/jabber.h b/src/jabber.h index 7e04d0bb..c10c9ca6 100644 --- a/src/jabber.h +++ b/src/jabber.h @@ -50,5 +50,6 @@ void jabber_send(const char * const msg, const char * const recipient); void jabber_update_presence(jabber_presence_t status, const char * const msg); const char * jabber_get_jid(void); jabber_conn_status_t jabber_get_connection_status(void); +void jabber_free_resources(void); #endif diff --git a/src/profanity.c b/src/profanity.c index 249268a5..82a9c72c 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -282,6 +282,7 @@ _shutdown_init(void) jabber_process_events(); } } + jabber_free_resources(); _shutdown(); } -- cgit 1.4.1-2-gfad0