aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlurchi <lurchi@strangeplace.net>2018-01-07 00:59:40 +0100
committerlurchi <lurchi@strangeplace.net>2018-01-07 00:59:40 +0100
commit1522c35f31166008edec5a3ac341d80626792e42 (patch)
tree5c0b740dd4b1b95201de71a42ba96670edee40d2
parent9510456139e319cadef5c8f2b5279c9bc31c5f5c (diff)
downloadgnunet-1522c35f31166008edec5a3ac341d80626792e42.tar.gz
gnunet-1522c35f31166008edec5a3ac341d80626792e42.zip
shutdown might happen when plc_gst is not in the hashmap
-rw-r--r--src/social/gnunet-service-social.c18
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;