diff options
-rw-r--r-- | src/consensus/consensus_api.c | 29 |
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 | */ |
266 | static void | 262 | static void |
267 | handle_conclude_done (struct GNUNET_CONSENSUS_Handle *consensus, | 263 | handle_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, | |||
509 | void | 503 | void |
510 | GNUNET_CONSENSUS_destroy (struct GNUNET_CONSENSUS_Handle *consensus) | 504 | GNUNET_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); |