From 554efefa689e0945beadb06a55e650147f15f6ec Mon Sep 17 00:00:00 2001 From: ch3 Date: Mon, 30 Nov 2015 23:39:02 +0000 Subject: -fixed bug in removal of peer in "view" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Bünger git-svn-id: https://gnunet.org/svn/gnunet@36705 140774ce-b5e7-0310-ab8b-a85725594a96 --- src/rps/gnunet-service-rps_view.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/rps/gnunet-service-rps_view.c b/src/rps/gnunet-service-rps_view.c index 1dacff26e4..b7a0ba2873 100644 --- a/src/rps/gnunet-service-rps_view.c +++ b/src/rps/gnunet-service-rps_view.c @@ -177,7 +177,8 @@ int View_remove_peer (const struct GNUNET_PeerIdentity *peer) { uint32_t *index; - uint32_t *index_swap; + uint32_t *swap_index; + uint32_t last_index; if (GNUNET_NO == View_contains_peer (peer)) { @@ -185,11 +186,14 @@ View_remove_peer (const struct GNUNET_PeerIdentity *peer) } index = GNUNET_CONTAINER_multipeermap_get (mpm, peer); GNUNET_assert (NULL != index); - if (*index < (View_size () - 1) ) + last_index = View_size () - 1; + if (*index < last_index) { /* Fill the 'gap' in the array with the last peer */ - array[*index] = array[(View_size () - 1)]; - index_swap = GNUNET_CONTAINER_multipeermap_get (mpm, &array[View_size ()]); - *index_swap = *index; + array[*index] = array[last_index]; + GNUNET_assert (GNUNET_YES == View_contains_peer (&array[last_index])); + swap_index = GNUNET_CONTAINER_multipeermap_get (mpm, &array[last_index]); + GNUNET_assert (NULL != swap_index); + *swap_index = *index; GNUNET_free (index); } GNUNET_CONTAINER_multipeermap_remove_all (mpm, peer); -- cgit v1.2.3-18-g5258