aboutsummaryrefslogtreecommitdiff
path: root/src/psyc
diff options
context:
space:
mode:
authorlurchi <lurchi@strangeplace.net>2017-12-30 18:44:03 +0100
committerlurchi <lurchi@strangeplace.net>2017-12-30 18:44:03 +0100
commitaf9ae1f37cbd418abd14f1fab0bb10210f68fefa (patch)
treed596a3d57a375a983cfecb3f435aa110e791848a /src/psyc
parentad24a2edfbae7aa37bc4cd74704d05a397e14d9b (diff)
downloadgnunet-af9ae1f37cbd418abd14f1fab0bb10210f68fefa.tar.gz
gnunet-af9ae1f37cbd418abd14f1fab0bb10210f68fefa.zip
master/slave pointers must not be NULL immediatly after sending leave request
Diffstat (limited to 'src/psyc')
-rw-r--r--src/psyc/gnunet-service-psyc.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/src/psyc/gnunet-service-psyc.c b/src/psyc/gnunet-service-psyc.c
index 8b5c69a65..740886423 100644
--- a/src/psyc/gnunet-service-psyc.c
+++ b/src/psyc/gnunet-service-psyc.c
@@ -279,7 +279,7 @@ struct Channel
279 * Is the client disconnected? 279 * Is the client disconnected?
280 * #GNUNET_YES or #GNUNET_NO 280 * #GNUNET_YES or #GNUNET_NO
281 */ 281 */
282 uint8_t is_disconnected; 282 uint8_t is_disconnecting;
283 283
284 /** 284 /**
285 * Is this a channel master (#GNUNET_YES), or slave (#GNUNET_NO)? 285 * Is this a channel master (#GNUNET_YES), or slave (#GNUNET_NO)?
@@ -508,8 +508,6 @@ cleanup_master (struct Master *mst)
508{ 508{
509 struct Channel *chn = &mst->channel; 509 struct Channel *chn = &mst->channel;
510 510
511 //if (NULL != mst->origin)
512 // GNUNET_MULTICAST_origin_stop (mst->origin, cleanup_cb, cleanup_cls);
513 GNUNET_CONTAINER_multihashmap_destroy (mst->join_reqs); 511 GNUNET_CONTAINER_multihashmap_destroy (mst->join_reqs);
514 GNUNET_CONTAINER_multihashmap_remove (masters, &chn->pub_key_hash, mst); 512 GNUNET_CONTAINER_multihashmap_remove (masters, &chn->pub_key_hash, mst);
515} 513}
@@ -546,11 +544,6 @@ cleanup_slave (struct Slave *slv)
546 GNUNET_free (slv->relays); 544 GNUNET_free (slv->relays);
547 slv->relays = NULL; 545 slv->relays = NULL;
548 } 546 }
549 //if (NULL != slv->member)
550 //{
551 // GNUNET_MULTICAST_member_part (slv->member, cleanup_cb, cleanup_cls);
552 // slv->member = NULL;
553 //}
554 GNUNET_CONTAINER_multihashmap_remove (slaves, &chn->pub_key_hash, slv); 547 GNUNET_CONTAINER_multihashmap_remove (slaves, &chn->pub_key_hash, slv);
555} 548}
556 549
@@ -646,7 +639,7 @@ client_notify_disconnect (void *cls,
646 chn, 639 chn,
647 (GNUNET_YES == chn->is_master) ? "master" : "slave", 640 (GNUNET_YES == chn->is_master) ? "master" : "slave",
648 GNUNET_h2s (&chn->pub_key_hash)); 641 GNUNET_h2s (&chn->pub_key_hash));
649 chn->is_disconnected = GNUNET_YES; 642 chn->is_disconnecting = GNUNET_YES;
650 cleanup_channel (chn); 643 cleanup_channel (chn);
651 } 644 }
652} 645}
@@ -2052,6 +2045,7 @@ handle_client_part_request (void *cls,
2052{ 2045{
2053 struct Client *c = cls; 2046 struct Client *c = cls;
2054 2047
2048 c->channel->is_disconnecting = GNUNET_YES;
2055 if (GNUNET_YES == c->channel->is_master) 2049 if (GNUNET_YES == c->channel->is_master)
2056 { 2050 {
2057 struct Master *mst = (struct Master *) c->channel; 2051 struct Master *mst = (struct Master *) c->channel;
@@ -2061,7 +2055,6 @@ handle_client_part_request (void *cls,
2061 mst); 2055 mst);
2062 GNUNET_assert (NULL != mst->origin); 2056 GNUNET_assert (NULL != mst->origin);
2063 GNUNET_MULTICAST_origin_stop (mst->origin, channel_part_cb, c->client); 2057 GNUNET_MULTICAST_origin_stop (mst->origin, channel_part_cb, c->client);
2064 mst->origin = NULL;
2065 } 2058 }
2066 else 2059 else
2067 { 2060 {
@@ -2072,7 +2065,6 @@ handle_client_part_request (void *cls,
2072 slv); 2065 slv);
2073 GNUNET_assert (NULL != slv->member); 2066 GNUNET_assert (NULL != slv->member);
2074 GNUNET_MULTICAST_member_part (slv->member, channel_part_cb, c->client); 2067 GNUNET_MULTICAST_member_part (slv->member, channel_part_cb, c->client);
2075 slv->member = NULL;
2076 } 2068 }
2077 GNUNET_SERVICE_client_continue (c->client); 2069 GNUNET_SERVICE_client_continue (c->client);
2078} 2070}
@@ -2137,7 +2129,7 @@ transmit_notify (void *cls, size_t *data_size, void *data)
2137 { 2129 {
2138 GNUNET_SCHEDULER_add_now (&schedule_transmit_message, chn); 2130 GNUNET_SCHEDULER_add_now (&schedule_transmit_message, chn);
2139 } 2131 }
2140 else if (GNUNET_YES == chn->is_disconnected 2132 else if (GNUNET_YES == chn->is_disconnecting
2141 && tmit_msg->last_ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END) 2133 && tmit_msg->last_ptype < GNUNET_MESSAGE_TYPE_PSYC_MESSAGE_END)
2142 { 2134 {
2143 /* FIXME: handle partial message (when still in_transmit) */ 2135 /* FIXME: handle partial message (when still in_transmit) */