From: Julius Bünger Date: Wed, 31 Oct 2018 10:52:23 +0000 (+0100) Subject: RPS service: Try to fix peer destruction during cleanup X-Git-Tag: v0.11.0~240^2~18 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b6395044ac67983a271581839e945027f6c089cf;p=oweals%2Fgnunet.git RPS service: Try to fix peer destruction during cleanup --- diff --git a/src/rps/gnunet-service-rps.c b/src/rps/gnunet-service-rps.c index 2e2fa96a7..d129ba746 100644 --- a/src/rps/gnunet-service-rps.c +++ b/src/rps/gnunet-service-rps.c @@ -2690,6 +2690,14 @@ clean_peer (struct Sub *sub, #endif /* ENABLE_MALICIOUS */ } + if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (sub->peer_map, peer)) + { + /* Peer was already removed by callback on destroyed channel */ + LOG (GNUNET_ERROR_TYPE_WARNING, + "Peer was removed from our knowledge during cleanup\n"); + return; + } + if ( (GNUNET_NO == check_peer_send_intention (get_peer_ctx (sub->peer_map, peer))) && (GNUNET_NO == View_contains_peer (sub->view, peer)) && @@ -2729,7 +2737,8 @@ cleanup_destroyed_channel (void *cls, channel_ctx->channel = NULL; remove_channel_ctx (channel_ctx); if (NULL != peer_ctx && - peer_ctx->send_channel_ctx == channel_ctx) + peer_ctx->send_channel_ctx == channel_ctx && + GNUNET_YES == check_sending_channel_needed (channel_ctx->peer_ctx)) { remove_peer (peer_ctx->sub, &peer_ctx->peer_id); }