From eed802215e87d2ca5d136443a4f7312ac284a628 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Mon, 24 Sep 2012 10:05:34 +0000 Subject: [PATCH] hunting bugs --- src/transport/plugin_transport_http_client.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/transport/plugin_transport_http_client.c b/src/transport/plugin_transport_http_client.c index 7dbbe7b9f..9f4ac94a8 100644 --- a/src/transport/plugin_transport_http_client.c +++ b/src/transport/plugin_transport_http_client.c @@ -169,6 +169,11 @@ struct Session */ int put_tmp_disconnected; + /** + * We received data to send while disconnecting, reconnect immediately + */ + int put_reconnect_required; + /** * Client receive handle */ @@ -468,6 +473,7 @@ http_client_plugin_send (void *cls, if (GNUNET_YES == s->put_tmp_disconnecting) { /* PUT connection is currently getting disconnected */ + s->put_reconnect_required = GNUNET_YES; GNUNET_break (0); return msgbuf_size; } @@ -1076,6 +1082,17 @@ client_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) s->put_tmp_disconnecting = GNUNET_NO; s->put_tmp_disconnected = GNUNET_YES; s->client_put = NULL; + + /* + * Handling a rare case: + * plugin_send was called during temporary put disconnect, + * reconnect required after connection was disconnected + */ + if (GNUNET_YES == s->put_reconnect_required) + { + s->put_reconnect_required = GNUNET_NO; + client_connect_put(s); + } } if (easy_h == s->client_get) { -- 2.25.1