From 78ff58cf770b19b5f1eaf760d168799a8a6473e5 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 6 May 2013 00:33:33 +0100 Subject: [PATCH] Fixed error when losing connection and segfaulting on notify_remind() --- src/profanity.c | 3 ++- src/tools/autocomplete.c | 8 +++++++- src/xmpp/connection.c | 4 ++-- src/xmpp/presence.c | 8 +++++++- src/xmpp/presence.h | 3 ++- 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