diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-10-29 11:24:22 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-10-29 11:24:22 +0100 |
commit | da376896f525195c469cee2d1a4a5cb57ad6b6f8 (patch) | |
tree | c0d750fc8dd8869ab9aef573d770e40ab1e2165a /src/psyc | |
parent | 059e364e55a1a3dda010762e0f029753abcbb1c6 (diff) | |
download | gnunet-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.c | 21 |
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 | */ |
933 | static void | 933 | static void |
934 | slave_disconnected (void *cls, enum GNUNET_MQ_Error error) | 934 | slave_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); |