aboutsummaryrefslogtreecommitdiff
path: root/src/rps/gnunet-service-rps.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rps/gnunet-service-rps.c')
-rw-r--r--src/rps/gnunet-service-rps.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/rps/gnunet-service-rps.c b/src/rps/gnunet-service-rps.c
index dc4c5dab7..56eab288e 100644
--- a/src/rps/gnunet-service-rps.c
+++ b/src/rps/gnunet-service-rps.c
@@ -965,8 +965,6 @@ remove_channel_ctx (struct ChannelCtx *channel_ctx)
965 channel_ctx->destruction_task = NULL; 965 channel_ctx->destruction_task = NULL;
966 } 966 }
967 967
968 GNUNET_free (channel_ctx);
969
970 if (NULL == peer_ctx) 968 if (NULL == peer_ctx)
971 return; 969 return;
972 if (channel_ctx == peer_ctx->send_channel_ctx) 970 if (channel_ctx == peer_ctx->send_channel_ctx)
@@ -978,6 +976,7 @@ remove_channel_ctx (struct ChannelCtx *channel_ctx)
978 { 976 {
979 peer_ctx->recv_channel_ctx = NULL; 977 peer_ctx->recv_channel_ctx = NULL;
980 } 978 }
979 GNUNET_free (channel_ctx);
981} 980}
982 981
983 982
@@ -2637,7 +2636,7 @@ insert_in_sampler (void *cls,
2637 } 2636 }
2638#ifdef TO_FILE 2637#ifdef TO_FILE
2639 sub->num_observed_peers++; 2638 sub->num_observed_peers++;
2640 GNUNET_CONTAINER_multipeermap_put 2639 (void) GNUNET_CONTAINER_multipeermap_put
2641 (sub->observed_unique_peers, 2640 (sub->observed_unique_peers,
2642 peer, 2641 peer,
2643 NULL, 2642 NULL,
@@ -2802,7 +2801,7 @@ clean_peer (struct Sub *sub,
2802 peer))) && 2801 peer))) &&
2803 (GNUNET_NO == View_contains_peer (sub->view, peer)) && 2802 (GNUNET_NO == View_contains_peer (sub->view, peer)) &&
2804 (GNUNET_NO == CustomPeerMap_contains_peer (sub->push_map, peer)) && 2803 (GNUNET_NO == CustomPeerMap_contains_peer (sub->push_map, peer)) &&
2805 (GNUNET_NO == CustomPeerMap_contains_peer (sub->push_map, peer)) && 2804 (GNUNET_NO == CustomPeerMap_contains_peer (sub->pull_map, peer)) &&
2806 (0 == RPS_sampler_count_id (sub->sampler, peer)) && 2805 (0 == RPS_sampler_count_id (sub->sampler, peer)) &&
2807 (GNUNET_YES == check_removable (get_peer_ctx (sub->peer_map, peer)))) 2806 (GNUNET_YES == check_removable (get_peer_ctx (sub->peer_map, peer))))
2808 { /* We can safely remove this peer */ 2807 { /* We can safely remove this peer */
@@ -2836,13 +2835,20 @@ cleanup_destroyed_channel (void *cls,
2836 (void) channel; 2835 (void) channel;
2837 2836
2838 channel_ctx->channel = NULL; 2837 channel_ctx->channel = NULL;
2839 remove_channel_ctx (channel_ctx);
2840 if ((NULL != peer_ctx) && 2838 if ((NULL != peer_ctx) &&
2841 (peer_ctx->send_channel_ctx == channel_ctx) && 2839 (peer_ctx->send_channel_ctx == channel_ctx) &&
2842 (GNUNET_YES == check_sending_channel_needed (channel_ctx->peer_ctx)) ) 2840 (GNUNET_YES == check_sending_channel_needed (peer_ctx)) )
2843 { 2841 {
2842 remove_channel_ctx (channel_ctx);
2844 remove_peer (peer_ctx->sub, &peer_ctx->peer_id); 2843 remove_peer (peer_ctx->sub, &peer_ctx->peer_id);
2845 } 2844 }
2845 else
2846 {
2847 /* We need this if-else construct because we need to make sure the channel
2848 * (context) is cleaned up before removing the peer, but still neet to
2849 * compare it while checking the condition */
2850 remove_channel_ctx (channel_ctx);
2851 }
2846} 2852}
2847 2853
2848 2854