aboutsummaryrefslogtreecommitdiff
path: root/src/psyc
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-10-29 11:24:22 +0100
committerChristian Grothoff <christian@grothoff.org>2017-10-29 11:24:22 +0100
commitda376896f525195c469cee2d1a4a5cb57ad6b6f8 (patch)
treec0d750fc8dd8869ab9aef573d770e40ab1e2165a /src/psyc
parent059e364e55a1a3dda010762e0f029753abcbb1c6 (diff)
downloadgnunet-da376896f525195c469cee2d1a4a5cb57ad6b6f8.tar.gz
gnunet-da376896f525195c469cee2d1a4a5cb57ad6b6f8.zip
handle service disconnect without crashing if reconnect fails
Diffstat (limited to 'src/psyc')
-rw-r--r--src/psyc/psyc_api.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/psyc/psyc_api.c b/src/psyc/psyc_api.c
index c93d8b383..e7790d201 100644
--- a/src/psyc/psyc_api.c
+++ b/src/psyc/psyc_api.c
@@ -931,7 +931,8 @@ slave_reconnect (void *cls)
931 * Reconnect after backoff period. 931 * Reconnect after backoff period.
932 */ 932 */
933static void 933static void
934slave_disconnected (void *cls, enum GNUNET_MQ_Error error) 934slave_disconnected (void *cls,
935 enum GNUNET_MQ_Error error)
935{ 936{
936 struct GNUNET_PSYC_Slave *slv = cls; 937 struct GNUNET_PSYC_Slave *slv = cls;
937 struct GNUNET_PSYC_Channel *chn = &slv->chn; 938 struct GNUNET_PSYC_Channel *chn = &slv->chn;
@@ -950,7 +951,7 @@ slave_disconnected (void *cls, enum GNUNET_MQ_Error error)
950 chn->mq = NULL; 951 chn->mq = NULL;
951 } 952 }
952 chn->reconnect_task = GNUNET_SCHEDULER_add_delayed (chn->reconnect_delay, 953 chn->reconnect_task = GNUNET_SCHEDULER_add_delayed (chn->reconnect_delay,
953 slave_reconnect, 954 &slave_reconnect,
954 slv); 955 slv);
955 chn->reconnect_delay = GNUNET_TIME_STD_BACKOFF (chn->reconnect_delay); 956 chn->reconnect_delay = GNUNET_TIME_STD_BACKOFF (chn->reconnect_delay);
956} 957}
@@ -993,9 +994,19 @@ slave_connect (struct GNUNET_PSYC_Slave *slv)
993 GNUNET_MQ_handler_end () 994 GNUNET_MQ_handler_end ()
994 }; 995 };
995 996
996 chn->mq = GNUNET_CLIENT_connect (chn->cfg, "psyc", 997 chn->mq = GNUNET_CLIENT_connect (chn->cfg,
997 handlers, slave_disconnected, slv); 998 "psyc",
998 GNUNET_assert (NULL != chn->mq); 999 handlers,
1000 &slave_disconnected,
1001 slv);
1002 if (NULL == chn->mq)
1003 {
1004 chn->reconnect_task = GNUNET_SCHEDULER_add_delayed (chn->reconnect_delay,
1005 &slave_reconnect,
1006 slv);
1007 chn->reconnect_delay = GNUNET_TIME_STD_BACKOFF (chn->reconnect_delay);
1008 return;
1009 }
999 chn->tmit = GNUNET_PSYC_transmit_create (chn->mq); 1010 chn->tmit = GNUNET_PSYC_transmit_create (chn->mq);
1000 1011
1001 GNUNET_MQ_send_copy (chn->mq, chn->connect_env); 1012 GNUNET_MQ_send_copy (chn->mq, chn->connect_env);