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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user