about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorDmitry Podgorny <pasis.ua@gmail.com>2012-10-17 00:52:19 +0300
committerDmitry Podgorny <pasis.ua@gmail.com>2012-10-17 00:52:19 +0300
commit6900d52d805149977d2f2ff0f8c2433169f21e31 (patch)
treea492b10cd1057568ea71b243ca2078288a8a6da2 /src
parentea9a52760620327a286cec07cb8a0750a1f1274c (diff)
downloadprofani-tty-6900d52d805149977d2f2ff0f8c2433169f21e31.tar.gz
jabber: fix crash when disconnection timeout is reached
Diffstat (limited to 'src')
-rw-r--r--src/jabber.c15
-rw-r--r--src/jabber.h1
-rw-r--r--src/profanity.c1
3 files changed, 10 insertions, 7 deletions
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();
 }