diff options
author | lurchi <lurchi@strangeplace.net> | 2018-01-07 00:59:40 +0100 |
---|---|---|
committer | lurchi <lurchi@strangeplace.net> | 2018-01-07 00:59:40 +0100 |
commit | 1522c35f31166008edec5a3ac341d80626792e42 (patch) | |
tree | 5c0b740dd4b1b95201de71a42ba96670edee40d2 /src/social | |
parent | 9510456139e319cadef5c8f2b5279c9bc31c5f5c (diff) | |
download | gnunet-1522c35f31166008edec5a3ac341d80626792e42.tar.gz gnunet-1522c35f31166008edec5a3ac341d80626792e42.zip |
shutdown might happen when plc_gst is not in the hashmap
Diffstat (limited to 'src/social')
-rw-r--r-- | src/social/gnunet-service-social.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/social/gnunet-service-social.c b/src/social/gnunet-service-social.c index d1e644812..520df20b9 100644 --- a/src/social/gnunet-service-social.c +++ b/src/social/gnunet-service-social.c | |||
@@ -503,17 +503,18 @@ cleanup_guest (struct Guest *gst) | |||
503 | struct GNUNET_CONTAINER_MultiHashMap * | 503 | struct GNUNET_CONTAINER_MultiHashMap * |
504 | plc_gst = GNUNET_CONTAINER_multihashmap_get (place_guests, | 504 | plc_gst = GNUNET_CONTAINER_multihashmap_get (place_guests, |
505 | &plc->pub_key_hash); | 505 | &plc->pub_key_hash); |
506 | GNUNET_assert (NULL != plc_gst); | 506 | if (NULL != plc_gst) |
507 | GNUNET_CONTAINER_multihashmap_remove (plc_gst, &plc->ego_pub_hash, gst); | ||
508 | |||
509 | if (0 == GNUNET_CONTAINER_multihashmap_size (plc_gst)) | ||
510 | { | 507 | { |
511 | GNUNET_CONTAINER_multihashmap_remove (place_guests, &plc->pub_key_hash, | 508 | GNUNET_CONTAINER_multihashmap_remove (plc_gst, &plc->ego_pub_hash, gst); |
512 | plc_gst); | 509 | |
513 | GNUNET_CONTAINER_multihashmap_destroy (plc_gst); | 510 | if (0 == GNUNET_CONTAINER_multihashmap_size (plc_gst)) |
511 | { | ||
512 | GNUNET_CONTAINER_multihashmap_remove (place_guests, &plc->pub_key_hash, | ||
513 | plc_gst); | ||
514 | GNUNET_CONTAINER_multihashmap_destroy (plc_gst); | ||
515 | } | ||
514 | } | 516 | } |
515 | GNUNET_CONTAINER_multihashmap_remove (guests, &plc->pub_key_hash, gst); | 517 | GNUNET_CONTAINER_multihashmap_remove (guests, &plc->pub_key_hash, gst); |
516 | |||
517 | if (NULL != gst->join_req) | 518 | if (NULL != gst->join_req) |
518 | GNUNET_free (gst->join_req); | 519 | GNUNET_free (gst->join_req); |
519 | if (NULL != gst->relays) | 520 | if (NULL != gst->relays) |
@@ -1869,6 +1870,7 @@ guest_enter (const struct GuestEnterRequest *greq, struct Guest **ret_gst) | |||
1869 | ret = GNUNET_YES; | 1870 | ret = GNUNET_YES; |
1870 | } | 1871 | } |
1871 | 1872 | ||
1873 | // TODO: explain why free(gst) not necessary | ||
1872 | if (NULL != ret_gst) | 1874 | if (NULL != ret_gst) |
1873 | *ret_gst = gst; | 1875 | *ret_gst = gst; |
1874 | return ret; | 1876 | return ret; |