diff options
-rw-r--r-- | src/psycstore/psycstore_api.c | 3 | ||||
-rw-r--r-- | src/social/gnunet-service-social.c | 25 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/psycstore/psycstore_api.c b/src/psycstore/psycstore_api.c index 16f4a1ae9..5a4865dce 100644 --- a/src/psycstore/psycstore_api.c +++ b/src/psycstore/psycstore_api.c | |||
@@ -362,6 +362,9 @@ do_connect (struct GNUNET_PSYCSTORE_Handle *h) | |||
362 | static void | 362 | static void |
363 | reconnect (void *cls) | 363 | reconnect (void *cls) |
364 | { | 364 | { |
365 | struct GNUNET_PSYCSTORE_Handle *h = cls; | ||
366 | |||
367 | h->reconnect_task = NULL; | ||
365 | do_connect (cls); | 368 | do_connect (cls); |
366 | } | 369 | } |
367 | 370 | ||
diff --git a/src/social/gnunet-service-social.c b/src/social/gnunet-service-social.c index 5b2a8ba9b..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) |
@@ -1755,6 +1756,7 @@ guest_enter (const struct GuestEnterRequest *greq, struct Guest **ret_gst) | |||
1755 | struct GNUNET_CONTAINER_MultiHashMap * | 1756 | struct GNUNET_CONTAINER_MultiHashMap * |
1756 | plc_gst = GNUNET_CONTAINER_multihashmap_get (place_guests, &place_pub_hash); | 1757 | plc_gst = GNUNET_CONTAINER_multihashmap_get (place_guests, &place_pub_hash); |
1757 | struct Guest *gst = NULL; | 1758 | struct Guest *gst = NULL; |
1759 | int new_guest; | ||
1758 | 1760 | ||
1759 | if (NULL != plc_gst) | 1761 | if (NULL != plc_gst) |
1760 | gst = GNUNET_CONTAINER_multihashmap_get (plc_gst, &ego_pub_hash); | 1762 | gst = GNUNET_CONTAINER_multihashmap_get (plc_gst, &ego_pub_hash); |
@@ -1763,9 +1765,12 @@ guest_enter (const struct GuestEnterRequest *greq, struct Guest **ret_gst) | |||
1763 | "plc_gst = %p, gst = %p\n", | 1765 | "plc_gst = %p, gst = %p\n", |
1764 | plc_gst, | 1766 | plc_gst, |
1765 | gst); | 1767 | gst); |
1768 | |||
1769 | new_guest = GNUNET_NO; | ||
1766 | if (NULL == gst) | 1770 | if (NULL == gst) |
1767 | { | 1771 | { |
1768 | gst = GNUNET_new (struct Guest); | 1772 | gst = GNUNET_new (struct Guest); |
1773 | new_guest = GNUNET_YES; | ||
1769 | } | 1774 | } |
1770 | if (NULL == gst->slave) | 1775 | if (NULL == gst->slave) |
1771 | { | 1776 | { |
@@ -1841,6 +1846,9 @@ guest_enter (const struct GuestEnterRequest *greq, struct Guest **ret_gst) | |||
1841 | plc_gst = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES); | 1846 | plc_gst = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_YES); |
1842 | (void) GNUNET_CONTAINER_multihashmap_put (place_guests, &plc->pub_key_hash, plc_gst, | 1847 | (void) GNUNET_CONTAINER_multihashmap_put (place_guests, &plc->pub_key_hash, plc_gst, |
1843 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); | 1848 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); |
1849 | } | ||
1850 | if (GNUNET_YES == new_guest) | ||
1851 | { | ||
1844 | (void) GNUNET_CONTAINER_multihashmap_put (plc_gst, &plc->ego_pub_hash, gst, | 1852 | (void) GNUNET_CONTAINER_multihashmap_put (plc_gst, &plc->ego_pub_hash, gst, |
1845 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); | 1853 | GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST); |
1846 | (void) GNUNET_CONTAINER_multihashmap_put (guests, &plc->pub_key_hash, gst, | 1854 | (void) GNUNET_CONTAINER_multihashmap_put (guests, &plc->pub_key_hash, gst, |
@@ -1862,6 +1870,7 @@ guest_enter (const struct GuestEnterRequest *greq, struct Guest **ret_gst) | |||
1862 | ret = GNUNET_YES; | 1870 | ret = GNUNET_YES; |
1863 | } | 1871 | } |
1864 | 1872 | ||
1873 | // TODO: explain why free(gst) not necessary | ||
1865 | if (NULL != ret_gst) | 1874 | if (NULL != ret_gst) |
1866 | *ret_gst = gst; | 1875 | *ret_gst = gst; |
1867 | return ret; | 1876 | return ret; |