Cancel autoping timer on disconnect or connection loss

If Profanity is disconnected in any way before ping response is
received, the autoping timer will expire after the next connection
is established. As result, user will be disconnected immediately.

Cancel autoping timer in ev_disconnect_cleanup(), so it is done
for all kind of disconnections.
This commit is contained in:
Dmitry Podgorny
2019-06-03 13:04:04 +03:00
parent 5b4277840a
commit 6138a5f79b
4 changed files with 15 additions and 8 deletions

View File

@@ -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) {