From fd4780b83c94fc9d67e6f3fbfbe67a0408d8392a Mon Sep 17 00:00:00 2001 From: Vysheng Date: Mon, 27 Jan 2014 21:23:58 +0400 Subject: [PATCH] maybe fixed conn restart --- net.c | 4 ++++ net.h | 1 + 2 files changed, 5 insertions(+) diff --git a/net.c b/net.c index bbc9a48..fa02e87 100644 --- a/net.c +++ b/net.c @@ -66,6 +66,7 @@ int ping_alarm (struct connection *c) { if (verbosity > 2) { logprintf ("ping alarm\n"); } + assert (c->state == conn_ready || c->state == conn_connecting); if (get_double_time () - c->last_receive_time > 20 * PING_TIMEOUT) { if (verbosity) { logprintf ( "fail connection: reason: ping timeout\n"); @@ -97,10 +98,13 @@ void start_ping_timer (struct connection *c) { void restart_connection (struct connection *c); int fail_alarm (void *ev) { + ((struct connection *)ev)->in_fail_timer = 0; restart_connection (ev); return 0; } void start_fail_timer (struct connection *c) { + if (c->in_fail_timer) { return; } + c->in_fail_timer = 1; c->ev.timeout = get_double_time () + 10; c->ev.alarm = (void *)fail_alarm; c->ev.self = c; diff --git a/net.h b/net.h index 181c46c..d89029f 100644 --- a/net.h +++ b/net.h @@ -124,6 +124,7 @@ struct connection { int packet_num; int out_packet_num; int last_connect_time; + int in_fail_timer; struct connection_methods *methods; struct session *session; void *extra;