diff options
author | lurchi <lurchi@strangeplace.net> | 2017-12-30 18:44:03 +0100 |
---|---|---|
committer | lurchi <lurchi@strangeplace.net> | 2017-12-30 18:44:03 +0100 |
commit | af9ae1f37cbd418abd14f1fab0bb10210f68fefa (patch) | |
tree | d596a3d57a375a983cfecb3f435aa110e791848a /src/psyc | |
parent | ad24a2edfbae7aa37bc4cd74704d05a397e14d9b (diff) | |
download | gnunet-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.c | 16 |
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) */ |