aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/consensus/consensus_api.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/src/consensus/consensus_api.c b/src/consensus/consensus_api.c
index fd61d3712..635a610ca 100644
--- a/src/consensus/consensus_api.c
+++ b/src/consensus/consensus_api.c
@@ -138,13 +138,9 @@ struct GNUNET_CONSENSUS_Handle
138 unsigned int conclude_min_size; 138 unsigned int conclude_min_size;
139 139
140 struct QueuedMessage *messages_head; 140 struct QueuedMessage *messages_head;
141
141 struct QueuedMessage *messages_tail; 142 struct QueuedMessage *messages_tail;
142 143
143 /**
144 * GNUNET_YES when currently in a section where destroy may not be
145 * called.
146 */
147 int may_not_destroy;
148}; 144};
149 145
150 146
@@ -265,17 +261,16 @@ handle_new_element (struct GNUNET_CONSENSUS_Handle *consensus,
265 */ 261 */
266static void 262static void
267handle_conclude_done (struct GNUNET_CONSENSUS_Handle *consensus, 263handle_conclude_done (struct GNUNET_CONSENSUS_Handle *consensus,
268 const struct GNUNET_MessageHeader *msg) 264 const struct GNUNET_MessageHeader *msg)
269{ 265{
270 GNUNET_assert (NULL != consensus->conclude_cb); 266 GNUNET_CONSENSUS_ConcludeCallback cc;
271 consensus->may_not_destroy = GNUNET_YES; 267
272 consensus->conclude_cb (consensus->conclude_cls); 268 GNUNET_assert (NULL != (cc = consensus->conclude_cb));
273 consensus->may_not_destroy = GNUNET_NO;
274 consensus->conclude_cb = NULL; 269 consensus->conclude_cb = NULL;
270 cc (consensus->conclude_cls);
275} 271}
276 272
277 273
278
279/** 274/**
280 * Type of a function to call when we receive a message 275 * Type of a function to call when we receive a message
281 * from the service. 276 * from the service.
@@ -290,7 +285,7 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
290 285
291 LOG (GNUNET_ERROR_TYPE_DEBUG, "received message from consensus service\n"); 286 LOG (GNUNET_ERROR_TYPE_DEBUG, "received message from consensus service\n");
292 287
293 if (msg == NULL) 288 if (NULL == msg)
294 { 289 {
295 /* Error, timeout, death */ 290 /* Error, timeout, death */
296 LOG (GNUNET_ERROR_TYPE_ERROR, "error receiving\n"); 291 LOG (GNUNET_ERROR_TYPE_ERROR, "error receiving\n");
@@ -299,7 +294,8 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
299 consensus->new_element_cb (consensus->new_element_cls, NULL); 294 consensus->new_element_cb (consensus->new_element_cls, NULL);
300 return; 295 return;
301 } 296 }
302 297 GNUNET_CLIENT_receive (consensus->client, &message_handler, consensus,
298 GNUNET_TIME_UNIT_FOREVER_REL);
303 switch (ntohs (msg->type)) 299 switch (ntohs (msg->type))
304 { 300 {
305 case GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_RECEIVED_ELEMENT: 301 case GNUNET_MESSAGE_TYPE_CONSENSUS_CLIENT_RECEIVED_ELEMENT:
@@ -311,8 +307,6 @@ message_handler (void *cls, const struct GNUNET_MessageHeader *msg)
311 default: 307 default:
312 GNUNET_break (0); 308 GNUNET_break (0);
313 } 309 }
314 GNUNET_CLIENT_receive (consensus->client, &message_handler, consensus,
315 GNUNET_TIME_UNIT_FOREVER_REL);
316} 310}
317 311
318/** 312/**
@@ -509,11 +503,6 @@ GNUNET_CONSENSUS_conclude (struct GNUNET_CONSENSUS_Handle *consensus,
509void 503void
510GNUNET_CONSENSUS_destroy (struct GNUNET_CONSENSUS_Handle *consensus) 504GNUNET_CONSENSUS_destroy (struct GNUNET_CONSENSUS_Handle *consensus)
511{ 505{
512 if (GNUNET_YES == consensus->may_not_destroy)
513 {
514 LOG (GNUNET_ERROR_TYPE_ERROR, "destroy may not be called right now\n");
515 GNUNET_assert (0);
516 }
517 if (consensus->client != NULL) 506 if (consensus->client != NULL)
518 { 507 {
519 GNUNET_CLIENT_disconnect (consensus->client); 508 GNUNET_CLIENT_disconnect (consensus->client);