diff options
author | Nathan S. Evans <evans@in.tum.de> | 2010-11-05 18:21:50 +0000 |
---|---|---|
committer | Nathan S. Evans <evans@in.tum.de> | 2010-11-05 18:21:50 +0000 |
commit | 75a33a1499cf60ea4364c9aa673816629a6c1413 (patch) | |
tree | 0620da4312bb04de4d7b65074fdd3b0c3dd6cc0e /src/util/connection.c | |
parent | 7217c601ad30760872823193d62307e7a335d226 (diff) | |
download | gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.tar.gz gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.zip |
big scheduler refactoring, expect some issues
Diffstat (limited to 'src/util/connection.c')
-rw-r--r-- | src/util/connection.c | 112 |
1 files changed, 35 insertions, 77 deletions
diff --git a/src/util/connection.c b/src/util/connection.c index 04d0c864d..a25dc0350 100644 --- a/src/util/connection.c +++ b/src/util/connection.c | |||
@@ -161,11 +161,6 @@ struct GNUNET_CONNECTION_Handle | |||
161 | { | 161 | { |
162 | 162 | ||
163 | /** | 163 | /** |
164 | * Scheduler that was used for the connect task. | ||
165 | */ | ||
166 | struct GNUNET_SCHEDULER_Handle *sched; | ||
167 | |||
168 | /** | ||
169 | * Configuration to use. | 164 | * Configuration to use. |
170 | */ | 165 | */ |
171 | const struct GNUNET_CONFIGURATION_Handle *cfg; | 166 | const struct GNUNET_CONFIGURATION_Handle *cfg; |
@@ -312,14 +307,11 @@ void GNUNET_CONNECTION_persist_(struct GNUNET_CONNECTION_Handle *sock) | |||
312 | * socket should henceforth be no longer used directly. | 307 | * socket should henceforth be no longer used directly. |
313 | * GNUNET_socket_destroy will close it. | 308 | * GNUNET_socket_destroy will close it. |
314 | * | 309 | * |
315 | * @param sched scheduler to use | ||
316 | * @param osSocket existing socket to box | 310 | * @param osSocket existing socket to box |
317 | * @return the boxed socket handle | 311 | * @return the boxed socket handle |
318 | */ | 312 | */ |
319 | struct GNUNET_CONNECTION_Handle * | 313 | struct GNUNET_CONNECTION_Handle * |
320 | GNUNET_CONNECTION_create_from_existing (struct GNUNET_SCHEDULER_Handle | 314 | GNUNET_CONNECTION_create_from_existing (struct GNUNET_NETWORK_Handle |
321 | *sched, | ||
322 | struct GNUNET_NETWORK_Handle | ||
323 | *osSocket) | 315 | *osSocket) |
324 | { | 316 | { |
325 | struct GNUNET_CONNECTION_Handle *ret; | 317 | struct GNUNET_CONNECTION_Handle *ret; |
@@ -327,7 +319,6 @@ GNUNET_CONNECTION_create_from_existing (struct GNUNET_SCHEDULER_Handle | |||
327 | ret->write_buffer_size = GNUNET_SERVER_MIN_BUFFER_SIZE; | 319 | ret->write_buffer_size = GNUNET_SERVER_MIN_BUFFER_SIZE; |
328 | ret->write_buffer = GNUNET_malloc(ret->write_buffer_size); | 320 | ret->write_buffer = GNUNET_malloc(ret->write_buffer_size); |
329 | ret->sock = osSocket; | 321 | ret->sock = osSocket; |
330 | ret->sched = sched; | ||
331 | return ret; | 322 | return ret; |
332 | } | 323 | } |
333 | 324 | ||
@@ -336,16 +327,13 @@ GNUNET_CONNECTION_create_from_existing (struct GNUNET_SCHEDULER_Handle | |||
336 | * Create a socket handle by accepting on a listen socket. This | 327 | * Create a socket handle by accepting on a listen socket. This |
337 | * function may block if the listen socket has no connection ready. | 328 | * function may block if the listen socket has no connection ready. |
338 | * | 329 | * |
339 | * @param sched scheduler to use | ||
340 | * @param access function to use to check if access is allowed | 330 | * @param access function to use to check if access is allowed |
341 | * @param access_cls closure for access | 331 | * @param access_cls closure for access |
342 | * @param lsock listen socket | 332 | * @param lsock listen socket |
343 | * @return the socket handle, NULL on error | 333 | * @return the socket handle, NULL on error |
344 | */ | 334 | */ |
345 | struct GNUNET_CONNECTION_Handle * | 335 | struct GNUNET_CONNECTION_Handle * |
346 | GNUNET_CONNECTION_create_from_accept (struct GNUNET_SCHEDULER_Handle | 336 | GNUNET_CONNECTION_create_from_accept (GNUNET_CONNECTION_AccessCheck access, |
347 | *sched, | ||
348 | GNUNET_CONNECTION_AccessCheck access, | ||
349 | void *access_cls, | 337 | void *access_cls, |
350 | struct GNUNET_NETWORK_Handle *lsock) | 338 | struct GNUNET_NETWORK_Handle *lsock) |
351 | { | 339 | { |
@@ -416,7 +404,6 @@ GNUNET_CONNECTION_create_from_accept (struct GNUNET_SCHEDULER_Handle | |||
416 | ret->addr = uaddr; | 404 | ret->addr = uaddr; |
417 | ret->addrlen = addrlen; | 405 | ret->addrlen = addrlen; |
418 | ret->sock = sock; | 406 | ret->sock = sock; |
419 | ret->sched = sched; | ||
420 | #if DEBUG_CONNECTION | 407 | #if DEBUG_CONNECTION |
421 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 408 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
422 | _("Accepting connection from `%s': %p\n"), | 409 | _("Accepting connection from `%s': %p\n"), |
@@ -494,8 +481,7 @@ destroy_continuation (void *cls, | |||
494 | #endif | 481 | #endif |
495 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task); | 482 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task); |
496 | sock->destroy_task | 483 | sock->destroy_task |
497 | = GNUNET_SCHEDULER_add_after (sock->sched, | 484 | = GNUNET_SCHEDULER_add_after (sock->write_task, |
498 | sock->write_task, | ||
499 | &destroy_continuation, sock); | 485 | &destroy_continuation, sock); |
500 | return; | 486 | return; |
501 | } | 487 | } |
@@ -517,8 +503,7 @@ destroy_continuation (void *cls, | |||
517 | { | 503 | { |
518 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task); | 504 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task); |
519 | sock->destroy_task | 505 | sock->destroy_task |
520 | = GNUNET_SCHEDULER_add_after (sock->sched, | 506 | = GNUNET_SCHEDULER_add_after (sock->read_task, |
521 | sock->read_task, | ||
522 | &destroy_continuation, sock); | 507 | &destroy_continuation, sock); |
523 | return; | 508 | return; |
524 | } | 509 | } |
@@ -529,7 +514,7 @@ destroy_continuation (void *cls, | |||
529 | while (NULL != (pos = sock->ap_head)) | 514 | while (NULL != (pos = sock->ap_head)) |
530 | { | 515 | { |
531 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->sock)); | 516 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->sock)); |
532 | GNUNET_SCHEDULER_cancel (sock->sched, pos->task); | 517 | GNUNET_SCHEDULER_cancel (pos->task); |
533 | GNUNET_CONTAINER_DLL_remove (sock->ap_head, sock->ap_tail, pos); | 518 | GNUNET_CONTAINER_DLL_remove (sock->ap_head, sock->ap_tail, pos); |
534 | GNUNET_free (pos); | 519 | GNUNET_free (pos); |
535 | } | 520 | } |
@@ -606,8 +591,7 @@ connect_fail_continuation (struct GNUNET_CONNECTION_Handle *h) | |||
606 | h); | 591 | h); |
607 | #endif | 592 | #endif |
608 | h->ccs -= COCO_RECEIVE_AGAIN; | 593 | h->ccs -= COCO_RECEIVE_AGAIN; |
609 | h->read_task = GNUNET_SCHEDULER_add_after (h->sched, | 594 | h->read_task = GNUNET_SCHEDULER_add_after (GNUNET_SCHEDULER_NO_TASK, |
610 | GNUNET_SCHEDULER_NO_TASK, | ||
611 | &receive_again, h); | 595 | &receive_again, h); |
612 | } | 596 | } |
613 | if (0 != (h->ccs & COCO_TRANSMIT_READY)) | 597 | if (0 != (h->ccs & COCO_TRANSMIT_READY)) |
@@ -618,12 +602,11 @@ connect_fail_continuation (struct GNUNET_CONNECTION_Handle *h) | |||
618 | h); | 602 | h); |
619 | #endif | 603 | #endif |
620 | GNUNET_assert (h->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK); | 604 | GNUNET_assert (h->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK); |
621 | GNUNET_SCHEDULER_cancel (h->sched, h->nth.timeout_task); | 605 | GNUNET_SCHEDULER_cancel (h->nth.timeout_task); |
622 | h->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; | 606 | h->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; |
623 | h->ccs -= COCO_TRANSMIT_READY; | 607 | h->ccs -= COCO_TRANSMIT_READY; |
624 | GNUNET_assert (h->write_task == GNUNET_SCHEDULER_NO_TASK); | 608 | GNUNET_assert (h->write_task == GNUNET_SCHEDULER_NO_TASK); |
625 | h->write_task = GNUNET_SCHEDULER_add_after (h->sched, | 609 | h->write_task = GNUNET_SCHEDULER_add_after (GNUNET_SCHEDULER_NO_TASK, |
626 | GNUNET_SCHEDULER_NO_TASK, | ||
627 | &transmit_ready, h); | 610 | &transmit_ready, h); |
628 | } | 611 | } |
629 | if (0 != (h->ccs & COCO_DESTROY_CONTINUATION)) | 612 | if (0 != (h->ccs & COCO_DESTROY_CONTINUATION)) |
@@ -636,8 +619,7 @@ connect_fail_continuation (struct GNUNET_CONNECTION_Handle *h) | |||
636 | h->ccs -= COCO_DESTROY_CONTINUATION; | 619 | h->ccs -= COCO_DESTROY_CONTINUATION; |
637 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == h->destroy_task); | 620 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == h->destroy_task); |
638 | h->destroy_task | 621 | h->destroy_task |
639 | = GNUNET_SCHEDULER_add_now (h->sched, | 622 | = GNUNET_SCHEDULER_add_now (&destroy_continuation, |
640 | &destroy_continuation, | ||
641 | h); | 623 | h); |
642 | } | 624 | } |
643 | } | 625 | } |
@@ -665,8 +647,7 @@ connect_success_continuation (struct GNUNET_CONNECTION_Handle *h) | |||
665 | h); | 647 | h); |
666 | #endif | 648 | #endif |
667 | h->ccs -= COCO_RECEIVE_AGAIN; | 649 | h->ccs -= COCO_RECEIVE_AGAIN; |
668 | h->read_task = GNUNET_SCHEDULER_add_after (h->sched, | 650 | h->read_task = GNUNET_SCHEDULER_add_after (GNUNET_SCHEDULER_NO_TASK, |
669 | GNUNET_SCHEDULER_NO_TASK, | ||
670 | &receive_again, h); | 651 | &receive_again, h); |
671 | } | 652 | } |
672 | if (0 != (h->ccs & COCO_TRANSMIT_READY)) | 653 | if (0 != (h->ccs & COCO_TRANSMIT_READY)) |
@@ -677,13 +658,12 @@ connect_success_continuation (struct GNUNET_CONNECTION_Handle *h) | |||
677 | h); | 658 | h); |
678 | #endif | 659 | #endif |
679 | GNUNET_assert (h->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK); | 660 | GNUNET_assert (h->nth.timeout_task != GNUNET_SCHEDULER_NO_TASK); |
680 | GNUNET_SCHEDULER_cancel (h->sched, h->nth.timeout_task); | 661 | GNUNET_SCHEDULER_cancel (h->nth.timeout_task); |
681 | h->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; | 662 | h->nth.timeout_task = GNUNET_SCHEDULER_NO_TASK; |
682 | h->ccs -= COCO_TRANSMIT_READY; | 663 | h->ccs -= COCO_TRANSMIT_READY; |
683 | GNUNET_assert (h->write_task == GNUNET_SCHEDULER_NO_TASK); | 664 | GNUNET_assert (h->write_task == GNUNET_SCHEDULER_NO_TASK); |
684 | h->write_task = | 665 | h->write_task = |
685 | GNUNET_SCHEDULER_add_write_net (h->sched, | 666 | GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining |
686 | GNUNET_TIME_absolute_get_remaining | ||
687 | (h->nth.transmit_timeout), h->sock, | 667 | (h->nth.transmit_timeout), h->sock, |
688 | &transmit_ready, h); | 668 | &transmit_ready, h); |
689 | } | 669 | } |
@@ -697,9 +677,8 @@ connect_success_continuation (struct GNUNET_CONNECTION_Handle *h) | |||
697 | h->ccs -= COCO_DESTROY_CONTINUATION; | 677 | h->ccs -= COCO_DESTROY_CONTINUATION; |
698 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == h->destroy_task); | 678 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == h->destroy_task); |
699 | h->destroy_task | 679 | h->destroy_task |
700 | = GNUNET_SCHEDULER_add_now (h->sched, | 680 | = GNUNET_SCHEDULER_add_now (&destroy_continuation, |
701 | &destroy_continuation, | 681 | h); |
702 | h); | ||
703 | } | 682 | } |
704 | } | 683 | } |
705 | 684 | ||
@@ -749,7 +728,7 @@ connect_probe_continuation (void *cls, | |||
749 | while (NULL != (pos = h->ap_head)) | 728 | while (NULL != (pos = h->ap_head)) |
750 | { | 729 | { |
751 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->sock)); | 730 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->sock)); |
752 | GNUNET_SCHEDULER_cancel (h->sched, pos->task); | 731 | GNUNET_SCHEDULER_cancel (pos->task); |
753 | GNUNET_CONTAINER_DLL_remove (h->ap_head, h->ap_tail, pos); | 732 | GNUNET_CONTAINER_DLL_remove (h->ap_head, h->ap_tail, pos); |
754 | GNUNET_free (pos); | 733 | GNUNET_free (pos); |
755 | } | 734 | } |
@@ -842,7 +821,7 @@ try_connect_using_address (void *cls, | |||
842 | GNUNET_TIME_absolute_get_remaining | 821 | GNUNET_TIME_absolute_get_remaining |
843 | (h->receive_timeout)); | 822 | (h->receive_timeout)); |
844 | ap->task = | 823 | ap->task = |
845 | GNUNET_SCHEDULER_add_write_net (h->sched, delay, ap->sock, | 824 | GNUNET_SCHEDULER_add_write_net (delay, ap->sock, |
846 | &connect_probe_continuation, ap); | 825 | &connect_probe_continuation, ap); |
847 | } | 826 | } |
848 | 827 | ||
@@ -852,15 +831,13 @@ try_connect_using_address (void *cls, | |||
852 | * This function returns immediately, even if the connection has not | 831 | * This function returns immediately, even if the connection has not |
853 | * yet been established. This function only creates TCP connections. | 832 | * yet been established. This function only creates TCP connections. |
854 | * | 833 | * |
855 | * @param sched scheduler to use | ||
856 | * @param cfg configuration to use | 834 | * @param cfg configuration to use |
857 | * @param hostname name of the host to connect to | 835 | * @param hostname name of the host to connect to |
858 | * @param port port to connect to | 836 | * @param port port to connect to |
859 | * @return the socket handle | 837 | * @return the socket handle |
860 | */ | 838 | */ |
861 | struct GNUNET_CONNECTION_Handle * | 839 | struct GNUNET_CONNECTION_Handle * |
862 | GNUNET_CONNECTION_create_from_connect (struct GNUNET_SCHEDULER_Handle *sched, | 840 | GNUNET_CONNECTION_create_from_connect (const struct |
863 | const struct | ||
864 | GNUNET_CONFIGURATION_Handle *cfg, | 841 | GNUNET_CONFIGURATION_Handle *cfg, |
865 | const char *hostname, uint16_t port) | 842 | const char *hostname, uint16_t port) |
866 | { | 843 | { |
@@ -869,13 +846,11 @@ GNUNET_CONNECTION_create_from_connect (struct GNUNET_SCHEDULER_Handle *sched, | |||
869 | GNUNET_assert (0 < strlen (hostname)); /* sanity check */ | 846 | GNUNET_assert (0 < strlen (hostname)); /* sanity check */ |
870 | ret = GNUNET_malloc (sizeof (struct GNUNET_CONNECTION_Handle)); | 847 | ret = GNUNET_malloc (sizeof (struct GNUNET_CONNECTION_Handle)); |
871 | ret->cfg = cfg; | 848 | ret->cfg = cfg; |
872 | ret->sched = sched; | ||
873 | ret->write_buffer_size = GNUNET_SERVER_MIN_BUFFER_SIZE; | 849 | ret->write_buffer_size = GNUNET_SERVER_MIN_BUFFER_SIZE; |
874 | ret->write_buffer = GNUNET_malloc(ret->write_buffer_size); | 850 | ret->write_buffer = GNUNET_malloc(ret->write_buffer_size); |
875 | ret->port = port; | 851 | ret->port = port; |
876 | ret->hostname = GNUNET_strdup (hostname); | 852 | ret->hostname = GNUNET_strdup (hostname); |
877 | ret->dns_active = GNUNET_RESOLVER_ip_get (sched, | 853 | ret->dns_active = GNUNET_RESOLVER_ip_get (cfg, |
878 | cfg, | ||
879 | ret->hostname, | 854 | ret->hostname, |
880 | AF_UNSPEC, | 855 | AF_UNSPEC, |
881 | GNUNET_CONNECTION_CONNECT_RETRY_TIMEOUT, | 856 | GNUNET_CONNECTION_CONNECT_RETRY_TIMEOUT, |
@@ -889,14 +864,12 @@ GNUNET_CONNECTION_create_from_connect (struct GNUNET_SCHEDULER_Handle *sched, | |||
889 | * This function returns immediately, even if the connection has not | 864 | * This function returns immediately, even if the connection has not |
890 | * yet been established. This function only creates UNIX connections. | 865 | * yet been established. This function only creates UNIX connections. |
891 | * | 866 | * |
892 | * @param sched scheduler to use | ||
893 | * @param cfg configuration to use | 867 | * @param cfg configuration to use |
894 | * @param unixpath path to connect to | 868 | * @param unixpath path to connect to |
895 | * @return the socket handle, NULL on systems without UNIX support | 869 | * @return the socket handle, NULL on systems without UNIX support |
896 | */ | 870 | */ |
897 | struct GNUNET_CONNECTION_Handle * | 871 | struct GNUNET_CONNECTION_Handle * |
898 | GNUNET_CONNECTION_create_from_connect_to_unixpath (struct GNUNET_SCHEDULER_Handle *sched, | 872 | GNUNET_CONNECTION_create_from_connect_to_unixpath (const struct |
899 | const struct | ||
900 | GNUNET_CONFIGURATION_Handle *cfg, | 873 | GNUNET_CONFIGURATION_Handle *cfg, |
901 | const char *unixpath) | 874 | const char *unixpath) |
902 | { | 875 | { |
@@ -922,7 +895,6 @@ GNUNET_CONNECTION_create_from_connect_to_unixpath (struct GNUNET_SCHEDULER_Handl | |||
922 | #endif | 895 | #endif |
923 | ret = GNUNET_malloc (sizeof (struct GNUNET_CONNECTION_Handle)); | 896 | ret = GNUNET_malloc (sizeof (struct GNUNET_CONNECTION_Handle)); |
924 | ret->cfg = cfg; | 897 | ret->cfg = cfg; |
925 | ret->sched = sched; | ||
926 | ret->write_buffer_size = GNUNET_SERVER_MIN_BUFFER_SIZE; | 898 | ret->write_buffer_size = GNUNET_SERVER_MIN_BUFFER_SIZE; |
927 | ret->write_buffer = GNUNET_malloc(ret->write_buffer_size); | 899 | ret->write_buffer = GNUNET_malloc(ret->write_buffer_size); |
928 | ret->port = 0; | 900 | ret->port = 0; |
@@ -960,15 +932,13 @@ GNUNET_CONNECTION_create_from_connect_to_unixpath (struct GNUNET_SCHEDULER_Handl | |||
960 | * This function returns immediately, even if the connection has not | 932 | * This function returns immediately, even if the connection has not |
961 | * yet been established. This function only creates TCP connections. | 933 | * yet been established. This function only creates TCP connections. |
962 | * | 934 | * |
963 | * @param sched scheduler to use | ||
964 | * @param af_family address family to use | 935 | * @param af_family address family to use |
965 | * @param serv_addr server address | 936 | * @param serv_addr server address |
966 | * @param addrlen length of server address | 937 | * @param addrlen length of server address |
967 | * @return the socket handle | 938 | * @return the socket handle |
968 | */ | 939 | */ |
969 | struct GNUNET_CONNECTION_Handle * | 940 | struct GNUNET_CONNECTION_Handle * |
970 | GNUNET_CONNECTION_create_from_sockaddr (struct GNUNET_SCHEDULER_Handle | 941 | GNUNET_CONNECTION_create_from_sockaddr (int af_family, |
971 | *sched, int af_family, | ||
972 | const struct sockaddr *serv_addr, | 942 | const struct sockaddr *serv_addr, |
973 | socklen_t addrlen) | 943 | socklen_t addrlen) |
974 | { | 944 | { |
@@ -990,7 +960,7 @@ GNUNET_CONNECTION_create_from_sockaddr (struct GNUNET_SCHEDULER_Handle | |||
990 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (s)); | 960 | GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (s)); |
991 | return NULL; | 961 | return NULL; |
992 | } | 962 | } |
993 | ret = GNUNET_CONNECTION_create_from_existing (sched, s); | 963 | ret = GNUNET_CONNECTION_create_from_existing (s); |
994 | ret->addr = GNUNET_malloc (addrlen); | 964 | ret->addr = GNUNET_malloc (addrlen); |
995 | memcpy (ret->addr, serv_addr, addrlen); | 965 | memcpy (ret->addr, serv_addr, addrlen); |
996 | ret->addrlen = addrlen; | 966 | ret->addrlen = addrlen; |
@@ -1041,8 +1011,7 @@ GNUNET_CONNECTION_destroy (struct GNUNET_CONNECTION_Handle *sock, | |||
1041 | { | 1011 | { |
1042 | if (sock->write_task != GNUNET_SCHEDULER_NO_TASK) | 1012 | if (sock->write_task != GNUNET_SCHEDULER_NO_TASK) |
1043 | { | 1013 | { |
1044 | GNUNET_SCHEDULER_cancel (sock->sched, | 1014 | GNUNET_SCHEDULER_cancel (sock->write_task); |
1045 | sock->write_task); | ||
1046 | sock->write_task = GNUNET_SCHEDULER_NO_TASK; | 1015 | sock->write_task = GNUNET_SCHEDULER_NO_TASK; |
1047 | sock->write_buffer_off = 0; | 1016 | sock->write_buffer_off = 0; |
1048 | } | 1017 | } |
@@ -1052,11 +1021,10 @@ GNUNET_CONNECTION_destroy (struct GNUNET_CONNECTION_Handle *sock, | |||
1052 | GNUNET_RESOLVER_request_cancel (sock->dns_active); | 1021 | GNUNET_RESOLVER_request_cancel (sock->dns_active); |
1053 | sock->dns_active = NULL; | 1022 | sock->dns_active = NULL; |
1054 | } | 1023 | } |
1055 | GNUNET_assert (sock->sched != NULL); | 1024 | |
1056 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task); | 1025 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == sock->destroy_task); |
1057 | sock->destroy_task | 1026 | sock->destroy_task |
1058 | = GNUNET_SCHEDULER_add_now (sock->sched, | 1027 | = GNUNET_SCHEDULER_add_now (&destroy_continuation, sock); |
1059 | &destroy_continuation, sock); | ||
1060 | } | 1028 | } |
1061 | 1029 | ||
1062 | 1030 | ||
@@ -1113,8 +1081,7 @@ receive_ready (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1113 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1081 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1114 | "Ignoring shutdown signal per configuration\n"); | 1082 | "Ignoring shutdown signal per configuration\n"); |
1115 | #endif | 1083 | #endif |
1116 | sh->read_task = GNUNET_SCHEDULER_add_read_net (tc->sched, | 1084 | sh->read_task = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining |
1117 | GNUNET_TIME_absolute_get_remaining | ||
1118 | (sh->receive_timeout), | 1085 | (sh->receive_timeout), |
1119 | sh->sock, | 1086 | sh->sock, |
1120 | &receive_ready, sh); | 1087 | &receive_ready, sh); |
@@ -1212,8 +1179,7 @@ receive_again (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
1212 | } | 1179 | } |
1213 | GNUNET_assert (sh->sock != NULL); | 1180 | GNUNET_assert (sh->sock != NULL); |
1214 | /* connect succeeded, wait for data! */ | 1181 | /* connect succeeded, wait for data! */ |
1215 | sh->read_task = GNUNET_SCHEDULER_add_read_net (tc->sched, | 1182 | sh->read_task = GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_absolute_get_remaining |
1216 | GNUNET_TIME_absolute_get_remaining | ||
1217 | (sh->receive_timeout), | 1183 | (sh->receive_timeout), |
1218 | sh->sock, | 1184 | sh->sock, |
1219 | &receive_ready, sh); | 1185 | &receive_ready, sh); |
@@ -1252,7 +1218,6 @@ GNUNET_CONNECTION_receive (struct GNUNET_CONNECTION_Handle *sock, | |||
1252 | if (sock->sock != NULL) | 1218 | if (sock->sock != NULL) |
1253 | { | 1219 | { |
1254 | memset (&tc, 0, sizeof (tc)); | 1220 | memset (&tc, 0, sizeof (tc)); |
1255 | tc.sched = sock->sched; | ||
1256 | tc.reason = GNUNET_SCHEDULER_REASON_PREREQ_DONE; | 1221 | tc.reason = GNUNET_SCHEDULER_REASON_PREREQ_DONE; |
1257 | receive_again (sock, &tc); | 1222 | receive_again (sock, &tc); |
1258 | return; | 1223 | return; |
@@ -1293,8 +1258,7 @@ GNUNET_CONNECTION_receive_cancel (struct GNUNET_CONNECTION_Handle *sock) | |||
1293 | { | 1258 | { |
1294 | if (sock->read_task != GNUNET_SCHEDULER_NO_TASK) | 1259 | if (sock->read_task != GNUNET_SCHEDULER_NO_TASK) |
1295 | { | 1260 | { |
1296 | GNUNET_assert (sock == GNUNET_SCHEDULER_cancel (sock->sched, | 1261 | GNUNET_assert (sock == GNUNET_SCHEDULER_cancel (sock->read_task)); |
1297 | sock->read_task)); | ||
1298 | sock->read_task = GNUNET_SCHEDULER_NO_TASK; | 1262 | sock->read_task = GNUNET_SCHEDULER_NO_TASK; |
1299 | } | 1263 | } |
1300 | else | 1264 | else |
@@ -1421,8 +1385,7 @@ transmit_error (struct GNUNET_CONNECTION_Handle *sock) | |||
1421 | } | 1385 | } |
1422 | if (sock->read_task != GNUNET_SCHEDULER_NO_TASK) | 1386 | if (sock->read_task != GNUNET_SCHEDULER_NO_TASK) |
1423 | { | 1387 | { |
1424 | GNUNET_SCHEDULER_cancel (sock->sched, | 1388 | GNUNET_SCHEDULER_cancel (sock->read_task); |
1425 | sock->read_task); | ||
1426 | sock->read_task = GNUNET_SCHEDULER_NO_TASK; | 1389 | sock->read_task = GNUNET_SCHEDULER_NO_TASK; |
1427 | signal_timeout (sock); | 1390 | signal_timeout (sock); |
1428 | return; | 1391 | return; |
@@ -1567,8 +1530,7 @@ SCHEDULE_WRITE: | |||
1567 | #endif | 1530 | #endif |
1568 | if (sock->write_task == GNUNET_SCHEDULER_NO_TASK) | 1531 | if (sock->write_task == GNUNET_SCHEDULER_NO_TASK) |
1569 | sock->write_task = | 1532 | sock->write_task = |
1570 | GNUNET_SCHEDULER_add_write_net (tc->sched, | 1533 | GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining |
1571 | GNUNET_TIME_absolute_get_remaining | ||
1572 | (sock->nth.transmit_timeout), | 1534 | (sock->nth.transmit_timeout), |
1573 | sock->sock, &transmit_ready, sock); | 1535 | sock->sock, &transmit_ready, sock); |
1574 | } | 1536 | } |
@@ -1612,10 +1574,8 @@ GNUNET_CONNECTION_notify_transmit_ready (struct GNUNET_CONNECTION_Handle | |||
1612 | (sock->ap_head == NULL) && (sock->dns_active == NULL)) | 1574 | (sock->ap_head == NULL) && (sock->dns_active == NULL)) |
1613 | { | 1575 | { |
1614 | if (sock->write_task != GNUNET_SCHEDULER_NO_TASK) | 1576 | if (sock->write_task != GNUNET_SCHEDULER_NO_TASK) |
1615 | GNUNET_SCHEDULER_cancel (sock->sched, | 1577 | GNUNET_SCHEDULER_cancel (sock->write_task); |
1616 | sock->write_task); | 1578 | sock->write_task = GNUNET_SCHEDULER_add_now (&connect_error, sock); |
1617 | sock->write_task = GNUNET_SCHEDULER_add_now (sock->sched, | ||
1618 | &connect_error, sock); | ||
1619 | return &sock->nth; | 1579 | return &sock->nth; |
1620 | } | 1580 | } |
1621 | if (GNUNET_SCHEDULER_NO_TASK != sock->write_task) | 1581 | if (GNUNET_SCHEDULER_NO_TASK != sock->write_task) |
@@ -1626,8 +1586,7 @@ GNUNET_CONNECTION_notify_transmit_ready (struct GNUNET_CONNECTION_Handle | |||
1626 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | 1586 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, |
1627 | "Scheduling transmit_ready (%p).\n", sock); | 1587 | "Scheduling transmit_ready (%p).\n", sock); |
1628 | #endif | 1588 | #endif |
1629 | sock->write_task = GNUNET_SCHEDULER_add_write_net (sock->sched, | 1589 | sock->write_task = GNUNET_SCHEDULER_add_write_net (GNUNET_TIME_absolute_get_remaining |
1630 | GNUNET_TIME_absolute_get_remaining | ||
1631 | (sock->nth. | 1590 | (sock->nth. |
1632 | transmit_timeout), | 1591 | transmit_timeout), |
1633 | sock->sock, | 1592 | sock->sock, |
@@ -1642,8 +1601,7 @@ GNUNET_CONNECTION_notify_transmit_ready (struct GNUNET_CONNECTION_Handle | |||
1642 | sock); | 1601 | sock); |
1643 | #endif | 1602 | #endif |
1644 | sock->ccs |= COCO_TRANSMIT_READY; | 1603 | sock->ccs |= COCO_TRANSMIT_READY; |
1645 | sock->nth.timeout_task = GNUNET_SCHEDULER_add_delayed (sock->sched, | 1604 | sock->nth.timeout_task = GNUNET_SCHEDULER_add_delayed (timeout, |
1646 | timeout, | ||
1647 | &transmit_timeout, | 1605 | &transmit_timeout, |
1648 | sock); | 1606 | sock); |
1649 | } | 1607 | } |
@@ -1668,7 +1626,7 @@ GNUNET_CONNECTION_notify_transmit_ready_cancel (struct | |||
1668 | "notify_transmit_ready_cancel cancels timeout_task (%p)\n", | 1626 | "notify_transmit_ready_cancel cancels timeout_task (%p)\n", |
1669 | h); | 1627 | h); |
1670 | #endif | 1628 | #endif |
1671 | GNUNET_SCHEDULER_cancel (h->sh->sched, h->timeout_task); | 1629 | GNUNET_SCHEDULER_cancel (h->timeout_task); |
1672 | h->timeout_task = GNUNET_SCHEDULER_NO_TASK; | 1630 | h->timeout_task = GNUNET_SCHEDULER_NO_TASK; |
1673 | h->sh->ccs -= COCO_TRANSMIT_READY; | 1631 | h->sh->ccs -= COCO_TRANSMIT_READY; |
1674 | } | 1632 | } |
@@ -1676,7 +1634,7 @@ GNUNET_CONNECTION_notify_transmit_ready_cancel (struct | |||
1676 | { | 1634 | { |
1677 | if (h->sh->write_task != GNUNET_SCHEDULER_NO_TASK) | 1635 | if (h->sh->write_task != GNUNET_SCHEDULER_NO_TASK) |
1678 | { | 1636 | { |
1679 | GNUNET_SCHEDULER_cancel (h->sh->sched, h->sh->write_task); | 1637 | GNUNET_SCHEDULER_cancel (h->sh->write_task); |
1680 | h->sh->write_task = GNUNET_SCHEDULER_NO_TASK; | 1638 | h->sh->write_task = GNUNET_SCHEDULER_NO_TASK; |
1681 | } | 1639 | } |
1682 | } | 1640 | } |