diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-04-30 08:17:37 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-04-30 08:17:37 +0000 |
commit | 95f9076a2139f5fb042b944a0658b6cda2fa35db (patch) | |
tree | b0826a2a1dcf812e6b4450fe6b05d47cd53ae49d /src/social | |
parent | 7746f68db77b9ca3c4aaca24ab2ce5253461240b (diff) | |
download | gnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.tar.gz gnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.zip |
implementing new scheduler shutdown semantics
Diffstat (limited to 'src/social')
-rw-r--r-- | src/social/gnunet-service-social.c | 31 | ||||
-rw-r--r-- | src/social/test_social.c | 28 |
2 files changed, 33 insertions, 26 deletions
diff --git a/src/social/gnunet-service-social.c b/src/social/gnunet-service-social.c index 1746a82ca..03a113d7e 100644 --- a/src/social/gnunet-service-social.c +++ b/src/social/gnunet-service-social.c | |||
@@ -408,8 +408,13 @@ static int | |||
408 | psyc_transmit_message (struct Place *plc); | 408 | psyc_transmit_message (struct Place *plc); |
409 | 409 | ||
410 | 410 | ||
411 | /** | ||
412 | * Clean up place data structures after a client disconnected. | ||
413 | * | ||
414 | * @param cls the `struct Place` to clean up | ||
415 | */ | ||
411 | static void | 416 | static void |
412 | cleanup_place (struct Place *plc); | 417 | cleanup_place (void *cls); |
413 | 418 | ||
414 | 419 | ||
415 | static struct MessageTransmitQueue * | 420 | static struct MessageTransmitQueue * |
@@ -426,7 +431,9 @@ place_entry_cleanup (void *cls, | |||
426 | const struct GNUNET_HashCode *key, | 431 | const struct GNUNET_HashCode *key, |
427 | void *value) | 432 | void *value) |
428 | { | 433 | { |
429 | cleanup_place (value); | 434 | struct Place *plc = value; |
435 | |||
436 | cleanup_place (plc); | ||
430 | return GNUNET_YES; | 437 | return GNUNET_YES; |
431 | } | 438 | } |
432 | 439 | ||
@@ -524,10 +531,14 @@ cleanup_guest (struct Guest *gst) | |||
524 | 531 | ||
525 | /** | 532 | /** |
526 | * Clean up place data structures after a client disconnected. | 533 | * Clean up place data structures after a client disconnected. |
534 | * | ||
535 | * @param cls the `struct Place` to clean up | ||
527 | */ | 536 | */ |
528 | static void | 537 | static void |
529 | cleanup_place (struct Place *plc) | 538 | cleanup_place (void *cls) |
530 | { | 539 | { |
540 | struct Place *plc = cls; | ||
541 | |||
531 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 542 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
532 | "%p Cleaning up place %s\n", | 543 | "%p Cleaning up place %s\n", |
533 | plc, GNUNET_h2s (&plc->pub_key_hash)); | 544 | plc, GNUNET_h2s (&plc->pub_key_hash)); |
@@ -541,13 +552,6 @@ cleanup_place (struct Place *plc) | |||
541 | } | 552 | } |
542 | 553 | ||
543 | 554 | ||
544 | static void | ||
545 | schedule_cleanup_place (void *cls) | ||
546 | { | ||
547 | cleanup_place (cls); | ||
548 | } | ||
549 | |||
550 | |||
551 | /** | 555 | /** |
552 | * Called whenever a client is disconnected. | 556 | * Called whenever a client is disconnected. |
553 | * Frees our resources associated with that client. | 557 | * Frees our resources associated with that client. |
@@ -2329,7 +2333,7 @@ psyc_transmit_notify_data (void *cls, uint16_t *data_size, void *data) | |||
2329 | tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg); | 2333 | tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg); |
2330 | plc->is_disconnected = GNUNET_YES; | 2334 | plc->is_disconnected = GNUNET_YES; |
2331 | GNUNET_SERVER_client_disconnect (tmit_frag->client); | 2335 | GNUNET_SERVER_client_disconnect (tmit_frag->client); |
2332 | GNUNET_SCHEDULER_add_now (&schedule_cleanup_place, plc); | 2336 | GNUNET_SCHEDULER_add_now (&cleanup_place, plc); |
2333 | return ret; | 2337 | return ret; |
2334 | } | 2338 | } |
2335 | else | 2339 | else |
@@ -2489,7 +2493,7 @@ psyc_transmit_notify_mod (void *cls, uint16_t *data_size, void *data, | |||
2489 | tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg); | 2493 | tmit_msg = psyc_transmit_queue_next_msg (plc, tmit_msg); |
2490 | plc->is_disconnected = GNUNET_YES; | 2494 | plc->is_disconnected = GNUNET_YES; |
2491 | GNUNET_SERVER_client_disconnect (tmit_frag->client); | 2495 | GNUNET_SERVER_client_disconnect (tmit_frag->client); |
2492 | GNUNET_SCHEDULER_add_now (&schedule_cleanup_place, plc); | 2496 | GNUNET_SCHEDULER_add_now (&cleanup_place, plc); |
2493 | } | 2497 | } |
2494 | else | 2498 | else |
2495 | { | 2499 | { |
@@ -3480,8 +3484,7 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, | |||
3480 | nc = GNUNET_SERVER_notification_context_create (server, 1); | 3484 | nc = GNUNET_SERVER_notification_context_create (server, 1); |
3481 | GNUNET_SERVER_add_handlers (server, handlers); | 3485 | GNUNET_SERVER_add_handlers (server, handlers); |
3482 | GNUNET_SERVER_disconnect_notify (server, &client_disconnect, NULL); | 3486 | GNUNET_SERVER_disconnect_notify (server, &client_disconnect, NULL); |
3483 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, | 3487 | GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); |
3484 | &shutdown_task, NULL); | ||
3485 | } | 3488 | } |
3486 | 3489 | ||
3487 | 3490 | ||
diff --git a/src/social/test_social.c b/src/social/test_social.c index 5eeb20196..e2639f4d6 100644 --- a/src/social/test_social.c +++ b/src/social/test_social.c | |||
@@ -267,16 +267,17 @@ end () | |||
267 | GNUNET_SCHEDULER_cancel (end_badly_task); | 267 | GNUNET_SCHEDULER_cancel (end_badly_task); |
268 | end_badly_task = NULL; | 268 | end_badly_task = NULL; |
269 | } | 269 | } |
270 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS, | 270 | GNUNET_SCHEDULER_add_now (&end_normally, NULL); |
271 | &end_normally, NULL); | ||
272 | } | 271 | } |
273 | 272 | ||
274 | 273 | ||
275 | static void | 274 | static void |
276 | transmit_resume (void *cls) | 275 | transmit_resume (void *cls) |
277 | { | 276 | { |
278 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Transmission resumed.\n"); | ||
279 | struct TransmitClosure *tmit = cls; | 277 | struct TransmitClosure *tmit = cls; |
278 | |||
279 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
280 | "Transmission resumed.\n"); | ||
280 | if (NULL != tmit->host_ann) | 281 | if (NULL != tmit->host_ann) |
281 | GNUNET_SOCIAL_host_announce_resume (tmit->host_ann); | 282 | GNUNET_SOCIAL_host_announce_resume (tmit->host_ann); |
282 | else | 283 | else |
@@ -357,14 +358,14 @@ host_farewell2 (void *cls, | |||
357 | { | 358 | { |
358 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 359 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
359 | "Nym left the place again.\n"); | 360 | "Nym left the place again.\n"); |
360 | GNUNET_SCHEDULER_add_now (schedule_host_leave, NULL); | 361 | GNUNET_SCHEDULER_add_now (&schedule_host_leave, NULL); |
361 | } | 362 | } |
362 | 363 | ||
363 | 364 | ||
364 | static void | 365 | static void |
365 | host_reconnected (void *cls, int result, | 366 | host_reconnected (void *cls, int result, |
366 | const struct GNUNET_CRYPTO_EddsaPublicKey *home_pub_key, | 367 | const struct GNUNET_CRYPTO_EddsaPublicKey *home_pub_key, |
367 | uint64_t max_message_id) | 368 | uint64_t max_message_id) |
368 | { | 369 | { |
369 | place_pub_key = *home_pub_key; | 370 | place_pub_key = *home_pub_key; |
370 | GNUNET_CRYPTO_hash (&place_pub_key, sizeof (place_pub_key), &place_pub_hash); | 371 | GNUNET_CRYPTO_hash (&place_pub_key, sizeof (place_pub_key), &place_pub_hash); |
@@ -375,7 +376,7 @@ host_reconnected (void *cls, int result, | |||
375 | is_host_reconnected = GNUNET_YES; | 376 | is_host_reconnected = GNUNET_YES; |
376 | if (GNUNET_YES == is_guest_reconnected) | 377 | if (GNUNET_YES == is_guest_reconnected) |
377 | { | 378 | { |
378 | GNUNET_SCHEDULER_add_now (schedule_guest_leave, NULL); | 379 | GNUNET_SCHEDULER_add_now (&schedule_guest_leave, NULL); |
379 | } | 380 | } |
380 | } | 381 | } |
381 | 382 | ||
@@ -393,7 +394,7 @@ guest_reconnected (void *cls, int result, | |||
393 | is_guest_reconnected = GNUNET_YES; | 394 | is_guest_reconnected = GNUNET_YES; |
394 | if (GNUNET_YES == is_host_reconnected) | 395 | if (GNUNET_YES == is_host_reconnected) |
395 | { | 396 | { |
396 | GNUNET_SCHEDULER_add_now (schedule_guest_leave, NULL); | 397 | GNUNET_SCHEDULER_add_now (&schedule_guest_leave, NULL); |
397 | } | 398 | } |
398 | } | 399 | } |
399 | 400 | ||
@@ -583,8 +584,10 @@ schedule_guest_leave (void *cls) | |||
583 | 584 | ||
584 | 585 | ||
585 | static void | 586 | static void |
586 | guest_look_for_result (void *cls, int64_t result_code, | 587 | guest_look_for_result (void *cls, |
587 | const void *data, uint16_t data_size) | 588 | int64_t result_code, |
589 | const void *data, | ||
590 | uint16_t data_size) | ||
588 | { | 591 | { |
589 | struct ResultClosure *rcls = cls; | 592 | struct ResultClosure *rcls = cls; |
590 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | 593 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, |
@@ -1047,7 +1050,7 @@ guest_recv_entry_decision (void *cls, | |||
1047 | break; | 1050 | break; |
1048 | 1051 | ||
1049 | case TEST_GUEST_ENTER_BY_NAME: | 1052 | case TEST_GUEST_ENTER_BY_NAME: |
1050 | GNUNET_SCHEDULER_add_now (schedule_reconnect, NULL); | 1053 | GNUNET_SCHEDULER_add_now (&schedule_reconnect, NULL); |
1051 | break; | 1054 | break; |
1052 | 1055 | ||
1053 | default: | 1056 | default: |
@@ -1313,7 +1316,8 @@ run (void *cls, | |||
1313 | #endif | 1316 | #endif |
1314 | { | 1317 | { |
1315 | cfg = c; | 1318 | cfg = c; |
1316 | end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); | 1319 | end_badly_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, |
1320 | &end_badly, NULL); | ||
1317 | 1321 | ||
1318 | core = GNUNET_CORE_connect (cfg, NULL, &core_connected, NULL, NULL, | 1322 | core = GNUNET_CORE_connect (cfg, NULL, &core_connected, NULL, NULL, |
1319 | NULL, GNUNET_NO, NULL, GNUNET_NO, NULL); | 1323 | NULL, GNUNET_NO, NULL, GNUNET_NO, NULL); |