diff --git a/src/event/common.c b/src/event/common.c index 062e680b..dd5ede98 100644 --- a/src/event/common.c +++ b/src/event/common.c @@ -53,6 +53,7 @@ ev_disconnect_cleanup(void) ui_disconnected(); session_disconnect(); roster_destroy(); + iq_autoping_timer_cancel(); muc_invites_clear(); muc_confserver_clear(); chat_sessions_clear(); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 7800ef3c..24208244 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -262,6 +262,16 @@ iq_id_handler_add(const char *const id, ProfIqCallback func, ProfIqFreeCallback g_hash_table_insert(id_handlers, strdup(id), handler); } +void +iq_autoping_timer_cancel(void) +{ + autoping_wait = FALSE; + if (autoping_time) { + g_timer_destroy(autoping_time); + autoping_time = NULL; + } +} + void iq_autoping_check(void) { @@ -283,10 +293,8 @@ iq_autoping_check(void) if (timeout > 0 && seconds_elapsed >= timeout) { cons_show("Autoping response timed out after %u seconds.", timeout); log_debug("Autoping check: timed out after %u seconds, disconnecting", timeout); + iq_autoping_timer_cancel(); session_autoping_fail(); - autoping_wait = FALSE; - g_timer_destroy(autoping_time); - autoping_time = NULL; } } @@ -1371,11 +1379,7 @@ _autoping_timed_send(xmpp_conn_t *const conn, void *const userdata) static int _auto_pong_id_handler(xmpp_stanza_t *const stanza, void *const userdata) { - autoping_wait = FALSE; - if (autoping_time) { - g_timer_destroy(autoping_time); - autoping_time = NULL; - } + iq_autoping_timer_cancel(); const char *id = xmpp_stanza_get_id(stanza); if (id == NULL) { diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h index d5330599..d04d88fd 100644 --- a/src/xmpp/xmpp.h +++ b/src/xmpp/xmpp.h @@ -187,6 +187,7 @@ void iq_room_affiliation_set(const char *const room, const char *const jid, char void iq_room_kick_occupant(const char *const room, const char *const nick, const char *const reason); void iq_room_role_set(const char *const room, const char *const nick, char *role, const char *const reason); void iq_room_role_list(const char * const room, char *role); +void iq_autoping_timer_cancel(void); void iq_autoping_check(void); void iq_http_upload_request(HTTPUpload *upload); void iq_command_list(const char *const target); diff --git a/tests/unittests/xmpp/stub_xmpp.c b/tests/unittests/xmpp/stub_xmpp.c index df862b9b..41870d73 100644 --- a/tests/unittests/xmpp/stub_xmpp.c +++ b/tests/unittests/xmpp/stub_xmpp.c @@ -206,6 +206,7 @@ void iq_room_role_set(const char * const room, const char * const nick, char *ro const char * const reason) {} void iq_room_role_list(const char * const room, char *role) {} void iq_last_activity_request(gchar *jid) {} +void iq_autoping_timer_cancel(void) {} void iq_autoping_check(void) {} void iq_rooms_cache_clear(void) {} void iq_command_list(const char *const target) {}