about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-05-06 00:33:33 +0100
committerJames Booth <boothj5@gmail.com>2013-05-06 00:33:33 +0100
commit78ff58cf770b19b5f1eaf760d168799a8a6473e5 (patch)
tree620201ea5bc0db2a2f907d87e2c8f3976842fc7d
parent3d8d5214bb93808252be6259980759ae3f3a2bbe (diff)
downloadprofani-tty-78ff58cf770b19b5f1eaf760d168799a8a6473e5.tar.gz
Fixed error when losing connection and segfaulting on notify_remind()
-rw-r--r--src/profanity.c3
-rw-r--r--src/tools/autocomplete.c8
-rw-r--r--src/xmpp/connection.c4
-rw-r--r--src/xmpp/presence.c8
-rw-r--r--src/xmpp/presence.h3
5 files changed, 20 insertions, 6 deletions
diff --git a/src/profanity.c b/src/profanity.c
index 53441e94..eb8de5ea 100644
--- a/src/profanity.c
+++ b/src/profanity.c
@@ -62,6 +62,7 @@ prof_run(const int disable_tls, char *log_level)
     inp_non_block();
     GTimer *timer = g_timer_new();
     gboolean cmd_result = TRUE;
+    jabber_conn_status_t conn_status = jabber_get_connection_status();
 
     char inp[INP_WIN_MAX];
     int size = 0;
@@ -71,7 +72,7 @@ prof_run(const int disable_tls, char *log_level)
         size = 0;
 
         while(ch != '\n') {
-            if (jabber_get_connection_status() == JABBER_CONNECTED) {
+            if (conn_status == JABBER_CONNECTED) {
                 _handle_idle_time();
             }
 
diff --git a/src/tools/autocomplete.c b/src/tools/autocomplete.c
index 72abcba4..adac86de 100644
--- a/src/tools/autocomplete.c
+++ b/src/tools/autocomplete.c
@@ -74,7 +74,13 @@ autocomplete_free(Autocomplete ac)
 gint
 autocomplete_length(Autocomplete ac)
 {
-    return g_slist_length(ac->items);
+    if (ac == NULL) {
+        return 0;
+    } else if (ac->items == NULL) {
+        return 0;
+    } else {
+        return g_slist_length(ac->items);
+    }
 }
 
 gboolean
diff --git a/src/xmpp/connection.c b/src/xmpp/connection.c
index 10aedf26..c067b736 100644
--- a/src/xmpp/connection.c
+++ b/src/xmpp/connection.c
@@ -100,7 +100,7 @@ jabber_init(const int disable_tls)
     jabber_conn.ctx = NULL;
     jabber_conn.tls_disabled = disable_tls;
     jabber_conn.domain = NULL;
-    presence_init();
+    presence_sub_requests_init();
     caps_init();
     available_resources = g_hash_table_new_full(g_str_hash, g_str_equal, free,
         (GDestroyNotify)resource_destroy);
@@ -327,7 +327,7 @@ _connection_free_session_data(void)
 {
     g_hash_table_remove_all(available_resources);
     chat_sessions_clear();
-    presence_free_sub_requests();
+    presence_clear_sub_requests();
 }
 
 int
diff --git a/src/xmpp/presence.c b/src/xmpp/presence.c
index 4f450f70..8a0e6611 100644
--- a/src/xmpp/presence.c
+++ b/src/xmpp/presence.c
@@ -61,7 +61,7 @@ static void _send_room_presence(xmpp_conn_t *conn, xmpp_stanza_t *presence);
 void _send_caps_request(char *node, char *caps_key, char *id, char *from);
 
 void
-presence_init(void)
+presence_sub_requests_init(void)
 {
     sub_requests_ac = autocomplete_new();
 }
@@ -141,6 +141,12 @@ presence_free_sub_requests(void)
     autocomplete_free(sub_requests_ac);
 }
 
+void
+presence_clear_sub_requests(void)
+{
+    autocomplete_clear(sub_requests_ac);
+}
+
 char *
 presence_sub_request_find(char * search_str)
 {
diff --git a/src/xmpp/presence.h b/src/xmpp/presence.h
index e3ede7f1..fa63d78e 100644
--- a/src/xmpp/presence.h
+++ b/src/xmpp/presence.h
@@ -23,8 +23,9 @@
 #ifndef PRESENCE_H
 #define PRESENCE_H
 
+void presence_sub_requests_init(void);
 void presence_add_handlers(void);
-void presence_init(void);
 void presence_free_sub_requests(void);
+void presence_clear_sub_requests(void);
 
 #endif