From 75a33a1499cf60ea4364c9aa673816629a6c1413 Mon Sep 17 00:00:00 2001 From: "Nathan S. Evans" Date: Fri, 5 Nov 2010 18:21:50 +0000 Subject: big scheduler refactoring, expect some issues --- src/arm/arm_api.c | 61 ++++++++------------------ src/arm/gnunet-arm.c | 25 +++-------- src/arm/gnunet-service-arm.c | 36 +++++---------- src/arm/gnunet-service-arm.h | 3 +- src/arm/gnunet-service-arm_interceptor.c | 75 ++++++++++++-------------------- src/arm/mockup-service.c | 6 +-- src/arm/test_arm_api.c | 9 +--- src/arm/test_exponential_backoff.c | 37 +++++----------- src/arm/test_gnunet_service_manager.c | 10 ++--- 9 files changed, 84 insertions(+), 178 deletions(-) (limited to 'src/arm') diff --git a/src/arm/arm_api.c b/src/arm/arm_api.c index e404f8d27..f935c590f 100644 --- a/src/arm/arm_api.c +++ b/src/arm/arm_api.c @@ -49,11 +49,6 @@ struct GNUNET_ARM_Handle */ struct GNUNET_CONFIGURATION_Handle *cfg; - /** - * Scheduler to use. - */ - struct GNUNET_SCHEDULER_Handle *sched; - }; @@ -62,11 +57,6 @@ struct GNUNET_ARM_Handle */ struct ShutdownContext { - /** - * Scheduler to be used to call continuation - */ - struct GNUNET_SCHEDULER_Handle *sched; - /** * Connection to the service that is being shutdown. */ @@ -80,7 +70,7 @@ struct ShutdownContext /** * Task set up to cancel the shutdown request on timeout. */ - GNUNET_SCHEDULER_TaskIdentifier timeout_task; + GNUNET_SCHEDULER_TaskIdentifier cancel_task; /** * Task to call once shutdown complete @@ -99,7 +89,6 @@ struct ShutdownContext }; - /** * Handler receiving response to service shutdown requests. * First call with NULL: service misbehaving, or something. @@ -112,8 +101,7 @@ struct ShutdownContext * @param msg NULL, indicating socket closure. */ static void -service_shutdown_handler (void *cls, - const struct GNUNET_MessageHeader *msg) +service_shutdown_handler (void *cls, const struct GNUNET_MessageHeader *msg) { struct ShutdownContext *shutdown_ctx = cls; @@ -124,7 +112,7 @@ service_shutdown_handler (void *cls, "Service handle shutdown before ACK!\n"); if (shutdown_ctx->cont != NULL) shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_SYSERR); - GNUNET_SCHEDULER_cancel(shutdown_ctx->sched, shutdown_ctx->timeout_task); + GNUNET_SCHEDULER_cancel(shutdown_ctx->cancel_task); GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO); GNUNET_free(shutdown_ctx); } @@ -137,7 +125,7 @@ service_shutdown_handler (void *cls, if (shutdown_ctx->cont != NULL) shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_NO); - GNUNET_SCHEDULER_cancel(shutdown_ctx->sched, shutdown_ctx->timeout_task); + GNUNET_SCHEDULER_cancel(shutdown_ctx->cancel_task); GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO); GNUNET_free(shutdown_ctx); } @@ -165,7 +153,7 @@ service_shutdown_handler (void *cls, if (shutdown_ctx->cont != NULL) shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_YES); - GNUNET_SCHEDULER_cancel(shutdown_ctx->sched, shutdown_ctx->timeout_task); + GNUNET_SCHEDULER_cancel(shutdown_ctx->cancel_task); GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO); GNUNET_free(shutdown_ctx); break; @@ -173,21 +161,17 @@ service_shutdown_handler (void *cls, } } - /** * Shutting down took too long, cancel receive and return error. * * @param cls closure * @param tc context information (why was this task triggered now) */ -static void -service_shutdown_timeout (void *cls, - const struct GNUNET_SCHEDULER_TaskContext * tc) +void service_shutdown_cancel (void *cls, + const struct GNUNET_SCHEDULER_TaskContext * tc) { struct ShutdownContext *shutdown_ctx = cls; - - GNUNET_log(GNUNET_ERROR_TYPE_WARNING, - _("Timeout during attempt to shutdown service. Hoping it is simply down already.\n")); + GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "service_shutdown_cancel called!\n"); shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_SYSERR); GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO); GNUNET_free(shutdown_ctx); @@ -222,10 +206,9 @@ write_shutdown (void *cls, size_t size, void *buf) GNUNET_CLIENT_receive (shutdown_ctx->sock, &service_shutdown_handler, shutdown_ctx, GNUNET_TIME_UNIT_FOREVER_REL); - shutdown_ctx->timeout_task = GNUNET_SCHEDULER_add_delayed (shutdown_ctx->sched, - GNUNET_TIME_absolute_get_remaining(shutdown_ctx->timeout), - &service_shutdown_timeout, - shutdown_ctx); + shutdown_ctx->cancel_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining(shutdown_ctx->timeout), + &service_shutdown_cancel, + shutdown_ctx); msg = (struct GNUNET_MessageHeader *) buf; msg->type = htons (GNUNET_MESSAGE_TYPE_ARM_SHUTDOWN); msg->size = htons (sizeof (struct GNUNET_MessageHeader)); @@ -240,7 +223,6 @@ write_shutdown (void *cls, size_t size, void *buf) * be used by the caller after this call * (calling this function frees "sock" after a while). * - * @param sched the scheduler to use for calling shutdown continuation * @param sock the socket connected to the service * @param timeout how long to wait before giving up on transmission * @param cont continuation to call once the service is really down @@ -248,16 +230,13 @@ write_shutdown (void *cls, size_t size, void *buf) * */ static void -arm_service_shutdown (struct GNUNET_SCHEDULER_Handle *sched, - struct GNUNET_CLIENT_Connection *sock, +arm_service_shutdown (struct GNUNET_CLIENT_Connection *sock, struct GNUNET_TIME_Relative timeout, GNUNET_CLIENT_ShutdownTask cont, void *cont_cls) { struct ShutdownContext *shutdown_ctx; - shutdown_ctx = GNUNET_malloc(sizeof(struct ShutdownContext)); - shutdown_ctx->sched = sched; shutdown_ctx->cont = cont; shutdown_ctx->cont_cls = cont_cls; shutdown_ctx->sock = sock; @@ -278,20 +257,17 @@ arm_service_shutdown (struct GNUNET_SCHEDULER_Handle *sched, * @param cfg configuration to use (needed to contact ARM; * the ARM service may internally use a different * configuration to determine how to start the service). - * @param sched scheduler to use * @param service service that *this* process is implementing/providing, can be NULL * @return context to use for further ARM operations, NULL on error */ struct GNUNET_ARM_Handle * GNUNET_ARM_connect (const struct GNUNET_CONFIGURATION_Handle *cfg, - struct GNUNET_SCHEDULER_Handle *sched, const char *service) { struct GNUNET_ARM_Handle *ret; ret = GNUNET_malloc (sizeof (struct GNUNET_ARM_Handle)); ret->cfg = GNUNET_CONFIGURATION_dup (cfg); - ret->sched = sched; return ret; } @@ -517,8 +493,7 @@ handle_response (void *cls, const struct GNUNET_MessageHeader *msg) : "STOP", (const char*) &sc[1]); GNUNET_CLIENT_disconnect (sc->h->client, GNUNET_NO); - sc->h->client = GNUNET_CLIENT_connect (sc->h->sched, - "arm", + sc->h->client = GNUNET_CLIENT_connect ("arm", sc->h->cfg); GNUNET_assert (NULL != sc->h->client); GNUNET_CLIENT_ignore_shutdown (sc->h->client, GNUNET_YES); @@ -641,7 +616,6 @@ GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h, struct RequestContext *sctx; struct GNUNET_CLIENT_Connection *client; size_t slen; - #if DEBUG_ARM GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("Asked to start service `%s' within %llu ms\n"), service_name, @@ -656,14 +630,13 @@ GNUNET_ARM_start_service (struct GNUNET_ARM_Handle *h, sctx->cls = cb_cls; sctx->timeout = GNUNET_TIME_relative_to_absolute (timeout); memcpy (&sctx[1], service_name, slen); - GNUNET_CLIENT_service_test (h->sched, - "arm", + GNUNET_CLIENT_service_test ("arm", h->cfg, timeout, &arm_service_report, sctx); return; } if (h->client == NULL) { - client = GNUNET_CLIENT_connect (h->sched, "arm", h->cfg); + client = GNUNET_CLIENT_connect ("arm", h->cfg); if (client == NULL) { cb (cb_cls, GNUNET_SYSERR); @@ -718,7 +691,7 @@ GNUNET_ARM_stop_service (struct GNUNET_ARM_Handle *h, (unsigned long long) timeout.rel_value); if (h->client == NULL) { - client = GNUNET_CLIENT_connect (h->sched, "arm", h->cfg); + client = GNUNET_CLIENT_connect ("arm", h->cfg); if (client == NULL) { cb (cb_cls, GNUNET_SYSERR); @@ -732,7 +705,7 @@ GNUNET_ARM_stop_service (struct GNUNET_ARM_Handle *h, arm_shutdown_ctx = GNUNET_malloc(sizeof(struct ARM_ShutdownContext)); arm_shutdown_ctx->cb = cb; arm_shutdown_ctx->cb_cls = cb_cls; - arm_service_shutdown (h->sched, h->client, timeout, &arm_shutdown_callback, arm_shutdown_ctx); + arm_service_shutdown (h->client, timeout, &arm_shutdown_callback, arm_shutdown_ctx); h->client = NULL; return; } diff --git a/src/arm/gnunet-arm.c b/src/arm/gnunet-arm.c index c19020ccb..ba74e8223 100644 --- a/src/arm/gnunet-arm.c +++ b/src/arm/gnunet-arm.c @@ -115,11 +115,6 @@ static int ret; */ static struct GNUNET_ARM_Handle *h; -/** - * Our scheduler. - */ -static struct GNUNET_SCHEDULER_Handle *sched; - /** * Our configuration. */ @@ -184,8 +179,7 @@ confirm_cb (void *cls, int success) break; } - GNUNET_SCHEDULER_add_continuation (sched, - &cps_loop, + GNUNET_SCHEDULER_add_continuation (&cps_loop, NULL, GNUNET_SCHEDULER_REASON_PREREQ_DONE); } @@ -213,8 +207,7 @@ confirm_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if (quiet != GNUNET_YES) fprintf(stdout, _("Service `%s' is not running.\n"), service); } - GNUNET_SCHEDULER_add_continuation (sched, - &cps_loop, + GNUNET_SCHEDULER_add_continuation (&cps_loop, NULL, GNUNET_SCHEDULER_REASON_PREREQ_DONE); } @@ -224,19 +217,16 @@ confirm_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * Main function that will be run by the scheduler. * * @param cls closure - * @param s the scheduler to use * @param args remaining command-line arguments * @param cfgfile name of the configuration file used (for saving, can be NULL!) * @param c configuration */ static void run (void *cls, - struct GNUNET_SCHEDULER_Handle *s, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { - sched = s; cfg = c; config_file = cfgfile; if (GNUNET_CONFIGURATION_get_value_string(cfg, "PATHS", "SERVICEHOME", &dir) != GNUNET_OK) @@ -247,7 +237,7 @@ run (void *cls, "PATHS"); return; } - h = GNUNET_ARM_connect (cfg, sched, NULL); + h = GNUNET_ARM_connect (cfg, NULL); if (h == NULL) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -255,8 +245,7 @@ run (void *cls, ret = 1; return; } - GNUNET_SCHEDULER_add_continuation (sched, - &cps_loop, + GNUNET_SCHEDULER_add_continuation (&cps_loop, NULL, GNUNET_SCHEDULER_REASON_PREREQ_DONE); } @@ -330,7 +319,7 @@ cps_loop (void *cls, case 4: if (test != NULL) { - GNUNET_CLIENT_service_test (sched, test, cfg, TEST_TIMEOUT, &confirm_task, test); + GNUNET_CLIENT_service_test (test, cfg, TEST_TIMEOUT, &confirm_task, test); return; } break; @@ -342,7 +331,7 @@ cps_loop (void *cls, end = 0; start = 1; restart = 0; - h = GNUNET_ARM_connect (cfg, sched, NULL); + h = GNUNET_ARM_connect (cfg, NULL); if (h == NULL) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -350,7 +339,7 @@ cps_loop (void *cls, ret = 1; return; } - GNUNET_SCHEDULER_add_now(sched, &cps_loop, NULL); + GNUNET_SCHEDULER_add_now(&cps_loop, NULL); return; } /* Fall through */ diff --git a/src/arm/gnunet-service-arm.c b/src/arm/gnunet-service-arm.c index ab4db97c7..c967c64e6 100644 --- a/src/arm/gnunet-service-arm.c +++ b/src/arm/gnunet-service-arm.c @@ -123,11 +123,6 @@ static struct ServiceList *running; */ static const struct GNUNET_CONFIGURATION_Handle *cfg; -/** - * Our scheduler. - */ -static struct GNUNET_SCHEDULER_Handle *sched; - /** * Command to prepend to each actual command. */ @@ -695,7 +690,7 @@ do_shutdown () { GNUNET_SERVER_destroy (server); server = NULL; - GNUNET_SCHEDULER_cancel (sched, child_death_task); + GNUNET_SCHEDULER_cancel (child_death_task); child_death_task = GNUNET_SCHEDULER_NO_TASK; } @@ -741,7 +736,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) pos = pos->next; } #if DELAY_SHUTDOWN - GNUNET_SCHEDULER_add_delayed(sched, GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 2), &dummy_task, NULL); + GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 2), &dummy_task, NULL); #endif if (running == NULL) do_shutdown (); @@ -802,8 +797,7 @@ delayed_restart_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) (unsigned long long) lowestRestartDelay.rel_value); #endif child_restart_task - = GNUNET_SCHEDULER_add_delayed (sched, - lowestRestartDelay, + = GNUNET_SCHEDULER_add_delayed (lowestRestartDelay, &delayed_restart_task, NULL); } @@ -834,7 +828,7 @@ maint_child_death (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if (0 == (tc->reason & GNUNET_SCHEDULER_REASON_READ_READY)) { child_death_task = - GNUNET_SCHEDULER_add_read_file (sched, GNUNET_TIME_UNIT_FOREVER_REL, pr, + GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, pr, &maint_child_death, NULL); return; } @@ -909,10 +903,9 @@ maint_child_death (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) pos->backoff = GNUNET_TIME_relative_multiply (pos->backoff, 2); if (GNUNET_SCHEDULER_NO_TASK != child_restart_task) - GNUNET_SCHEDULER_cancel (sched, child_restart_task); + GNUNET_SCHEDULER_cancel (child_restart_task); child_restart_task - = GNUNET_SCHEDULER_add_with_priority (sched, - GNUNET_SCHEDULER_PRIORITY_IDLE, + = GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, &delayed_restart_task, NULL); } @@ -934,7 +927,7 @@ maint_child_death (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) else { child_death_task = - GNUNET_SCHEDULER_add_read_file (sched, GNUNET_TIME_UNIT_FOREVER_REL, pr, + GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, pr, &maint_child_death, NULL); } } @@ -986,7 +979,7 @@ handle_shutdown (void *cls, GNUNET_TIME_UNIT_FOREVER_REL, &transmit_shutdown_ack, client); GNUNET_SERVER_client_persist_ (client); - GNUNET_SCHEDULER_shutdown (sched); + GNUNET_SCHEDULER_shutdown (); } @@ -1011,13 +1004,11 @@ sighandler_child_death () * Process arm requests. * * @param cls closure - * @param s scheduler to use * @param serv the initialized server * @param c configuration to use */ static void run (void *cls, - struct GNUNET_SCHEDULER_Handle *s, struct GNUNET_SERVER_Handle *serv, const struct GNUNET_CONFIGURATION_Handle *c) { @@ -1032,18 +1023,16 @@ run (void *cls, char *pos; cfg = c; - sched = s; server = serv; GNUNET_assert (serv != NULL); pr = GNUNET_DISK_pipe_handle (sigpipe, GNUNET_DISK_PIPE_END_READ); GNUNET_assert (pr != NULL); GNUNET_SERVER_ignore_shutdown (serv, GNUNET_YES); - GNUNET_SCHEDULER_add_delayed (sched, - GNUNET_TIME_UNIT_FOREVER_REL, + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, NULL); child_death_task = - GNUNET_SCHEDULER_add_read_file (sched, GNUNET_TIME_UNIT_FOREVER_REL, pr, + GNUNET_SCHEDULER_add_read_file (GNUNET_TIME_UNIT_FOREVER_REL, pr, &maint_child_death, NULL); if (GNUNET_OK != @@ -1089,14 +1078,13 @@ run (void *cls, } /* create listening sockets for future services*/ - prepareServices (cfg, sched); + prepareServices (cfg); /* process client requests */ GNUNET_SERVER_add_handlers (server, handlers); /* manage services */ - GNUNET_SCHEDULER_add_with_priority (sched, - GNUNET_SCHEDULER_PRIORITY_IDLE, + GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_IDLE, &config_change_task, NULL); } diff --git a/src/arm/gnunet-service-arm.h b/src/arm/gnunet-service-arm.h index 1f9085889..0ef557157 100644 --- a/src/arm/gnunet-service-arm.h +++ b/src/arm/gnunet-service-arm.h @@ -49,7 +49,6 @@ int start_service (struct GNUNET_SERVER_Client *client, int stop_listening (const char *serviceName); void prepareServices (const struct GNUNET_CONFIGURATION_Handle - *configurationHandle, - struct GNUNET_SCHEDULER_Handle *sched); + *configurationHandle); #endif diff --git a/src/arm/gnunet-service-arm_interceptor.c b/src/arm/gnunet-service-arm_interceptor.c index 8f79db6c5..56268b2d0 100644 --- a/src/arm/gnunet-service-arm_interceptor.c +++ b/src/arm/gnunet-service-arm_interceptor.c @@ -205,11 +205,6 @@ static unsigned int numDefaultServices; */ static const struct GNUNET_CONFIGURATION_Handle *cfg; -/** - * - */ -static struct GNUNET_SCHEDULER_Handle *scheduler; - /** * */ @@ -293,7 +288,7 @@ closeClientAndServiceSockets (struct ForwardedConnection *fc, #endif if (fc->service_to_client_task != GNUNET_SCHEDULER_NO_TASK) { - GNUNET_SCHEDULER_cancel (scheduler, fc->service_to_client_task); + GNUNET_SCHEDULER_cancel (fc->service_to_client_task); fc->service_to_client_task = GNUNET_SCHEDULER_NO_TASK; } if (fc->armClientSocket != NULL) @@ -312,8 +307,7 @@ closeClientAndServiceSockets (struct ForwardedConnection *fc, #endif if (fc->client_to_service_task != GNUNET_SCHEDULER_NO_TASK) { - GNUNET_SCHEDULER_cancel (scheduler, - fc->client_to_service_task); + GNUNET_SCHEDULER_cancel ( fc->client_to_service_task); fc->client_to_service_task = GNUNET_SCHEDULER_NO_TASK; } if (fc->armClientSocket != NULL) @@ -331,8 +325,7 @@ closeClientAndServiceSockets (struct ForwardedConnection *fc, "Closing forwarding connection (done with both directions)\n"); #endif if (fc->start_task != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (scheduler, - fc->start_task); + GNUNET_SCHEDULER_cancel ( fc->start_task); if ( (NULL != fc->armClientSocket) && (GNUNET_SYSERR == GNUNET_NETWORK_socket_close (fc->armClientSocket)) ) @@ -388,7 +381,7 @@ forwardToClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) fc->armClientSocket)) { fc->service_to_client_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &forwardToClient, fc); @@ -421,7 +414,7 @@ forwardToClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) fc->service_to_client_bufferPos += numberOfBytesSent; fc->service_to_client_bufferDataLength -= numberOfBytesSent; fc->service_to_client_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &forwardToClient, @@ -429,8 +422,7 @@ forwardToClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) return; } fc->service_to_client_task = - GNUNET_SCHEDULER_add_read_net (scheduler, - GNUNET_TIME_UNIT_FOREVER_REL, + GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, fc->armServiceSocket, &receiveFromService, fc); @@ -461,7 +453,7 @@ receiveFromService (void *cls, fc->armServiceSocket)) { fc->service_to_client_task = - GNUNET_SCHEDULER_add_read_net (scheduler, + GNUNET_SCHEDULER_add_read_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armServiceSocket, &receiveFromService, fc); @@ -491,8 +483,7 @@ receiveFromService (void *cls, if ( (fc->client_to_service_bufferDataLength > 0) && (fc->client_to_service_task != GNUNET_SCHEDULER_NO_TASK) ) { - GNUNET_SCHEDULER_cancel (scheduler, - fc->client_to_service_task); + GNUNET_SCHEDULER_cancel (fc->client_to_service_task); fc->client_to_service_task = GNUNET_SCHEDULER_NO_TASK; } fc->back_off = GNUNET_TIME_relative_multiply (fc->back_off, 2); @@ -508,7 +499,7 @@ receiveFromService (void *cls, rem = GNUNET_TIME_absolute_get_remaining (fc->timeout); GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); fc->start_task - = GNUNET_SCHEDULER_add_delayed (scheduler, + = GNUNET_SCHEDULER_add_delayed ( GNUNET_TIME_relative_min (fc->back_off, rem), &start_forwarding, @@ -533,7 +524,7 @@ receiveFromService (void *cls, fc->service_to_client_bufferDataLength); #endif fc->service_to_client_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &forwardToClient, fc); @@ -565,7 +556,7 @@ forwardToService (void *cls, fc->armServiceSocket)) { fc->client_to_service_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armServiceSocket, &forwardToService, fc); @@ -585,8 +576,7 @@ forwardToService (void *cls, if ( (fc->service_to_client_bufferDataLength == 0) && (fc->service_to_client_task != GNUNET_SCHEDULER_NO_TASK) ) { - GNUNET_SCHEDULER_cancel (scheduler, - fc->service_to_client_task); + GNUNET_SCHEDULER_cancel (fc->service_to_client_task); fc->service_to_client_task = GNUNET_SCHEDULER_NO_TASK; } fc->back_off = GNUNET_TIME_relative_multiply (fc->back_off, 2); @@ -602,8 +592,7 @@ forwardToService (void *cls, rem = GNUNET_TIME_absolute_get_remaining (fc->timeout); GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); fc->start_task - = GNUNET_SCHEDULER_add_delayed (scheduler, - GNUNET_TIME_relative_min (fc->back_off, + = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_min (fc->back_off, rem), &start_forwarding, fc); @@ -631,15 +620,14 @@ forwardToService (void *cls, fc->client_to_service_bufferPos += numberOfBytesSent; fc->client_to_service_bufferDataLength -= numberOfBytesSent; fc->client_to_service_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armServiceSocket, &forwardToService, fc); return; } fc->client_to_service_task = - GNUNET_SCHEDULER_add_read_net (scheduler, - GNUNET_TIME_UNIT_FOREVER_REL, + GNUNET_SCHEDULER_add_read_net (GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &receiveFromClient, fc); } @@ -661,7 +649,7 @@ receiveFromClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) fc->armClientSocket)) { fc->client_to_service_task = - GNUNET_SCHEDULER_add_read_net (scheduler, + GNUNET_SCHEDULER_add_read_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &receiveFromClient, fc); @@ -700,7 +688,7 @@ receiveFromClient (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) #endif if (fc->armServiceSocket != NULL) fc->client_to_service_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armServiceSocket, &forwardToService, fc); @@ -769,8 +757,7 @@ start_forwarding (void *cls, #endif GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); fc->start_task - = GNUNET_SCHEDULER_add_delayed (scheduler, - GNUNET_TIME_relative_min (fc->back_off, + = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_min (fc->back_off, rem), &start_forwarding, fc); @@ -784,13 +771,13 @@ start_forwarding (void *cls, { if (fc->client_to_service_bufferDataLength == 0) fc->client_to_service_task = - GNUNET_SCHEDULER_add_read_net (scheduler, + GNUNET_SCHEDULER_add_read_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &receiveFromClient, fc); else fc->client_to_service_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armServiceSocket, &forwardToService, fc); @@ -799,13 +786,13 @@ start_forwarding (void *cls, { if (fc->service_to_client_bufferDataLength == 0) fc->service_to_client_task = - GNUNET_SCHEDULER_add_read_net (scheduler, + GNUNET_SCHEDULER_add_read_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armServiceSocket, &receiveFromService, fc); else fc->service_to_client_task = - GNUNET_SCHEDULER_add_write_net (scheduler, + GNUNET_SCHEDULER_add_write_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &forwardToClient, fc); @@ -833,7 +820,7 @@ stop_listening (const char *serviceName) (strcmp (pos->serviceName, serviceName) != 0) ) continue; if (pos->acceptTask != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (scheduler, pos->acceptTask); + GNUNET_SCHEDULER_cancel (pos->acceptTask); GNUNET_break (GNUNET_OK == GNUNET_NETWORK_socket_close (pos->listeningSocket)); GNUNET_CONTAINER_DLL_remove (serviceListeningInfoList_head, @@ -882,7 +869,7 @@ accept_and_forward (struct ServiceListeningInfo *serviceListeningInfo) serviceListeningInfoList_tail, serviceListeningInfo); serviceListeningInfo->acceptTask = - GNUNET_SCHEDULER_add_read_net (scheduler, + GNUNET_SCHEDULER_add_read_net ( GNUNET_TIME_UNIT_FOREVER_REL, serviceListeningInfo->listeningSocket, &acceptConnection, @@ -898,14 +885,13 @@ accept_and_forward (struct ServiceListeningInfo *serviceListeningInfo) fc->timeout = GNUNET_TIME_relative_to_absolute (GNUNET_CONSTANTS_SERVICE_TIMEOUT); fc->back_off = GNUNET_TIME_UNIT_MILLISECONDS; fc->client_to_service_task = - GNUNET_SCHEDULER_add_read_net (scheduler, + GNUNET_SCHEDULER_add_read_net ( GNUNET_TIME_UNIT_FOREVER_REL, fc->armClientSocket, &receiveFromClient, fc); GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == fc->start_task); fc->start_task - = GNUNET_SCHEDULER_add_now (scheduler, - &start_forwarding, + = GNUNET_SCHEDULER_add_now (&start_forwarding, fc); } @@ -963,8 +949,7 @@ acceptConnection (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) GNUNET_free (pos->listeningSocket); /* deliberately no closing! */ GNUNET_free (pos->service_addr); GNUNET_free (pos->serviceName); - GNUNET_SCHEDULER_cancel (scheduler, - pos->acceptTask); + GNUNET_SCHEDULER_cancel ( pos->acceptTask); GNUNET_CONTAINER_DLL_remove (serviceListeningInfoList_head, serviceListeningInfoList_tail, pos); @@ -1073,7 +1058,7 @@ createListeningSocket (struct sockaddr *sa, serviceListeningInfo->service_addr_len = addr_len; serviceListeningInfo->listeningSocket = sock; serviceListeningInfo->acceptTask = - GNUNET_SCHEDULER_add_read_net (scheduler, + GNUNET_SCHEDULER_add_read_net ( GNUNET_TIME_UNIT_FOREVER_REL, sock, &acceptConnection, serviceListeningInfo); @@ -1123,15 +1108,13 @@ checkPortNumberCB (void *cls, * Entry point to the Service Manager * * @param configurationHandle configuration to use to get services - * @param sched scheduler to handle clients and services communications */ void prepareServices (const struct GNUNET_CONFIGURATION_Handle - *configurationHandle, struct GNUNET_SCHEDULER_Handle *sched) + *configurationHandle) { char *defaultServicesString; - scheduler = sched; cfg = configurationHandle; /* Split the default services into a list */ if (GNUNET_OK == diff --git a/src/arm/mockup-service.c b/src/arm/mockup-service.c index da8ada1db..4dae8ffb4 100644 --- a/src/arm/mockup-service.c +++ b/src/arm/mockup-service.c @@ -28,8 +28,6 @@ #include "gnunet_strings_lib.h" #include "gnunet_time_lib.h" -static struct GNUNET_SCHEDULER_Handle *sched; - static size_t transmit_shutdown_ack (void *cls, size_t size, void *buf) @@ -77,13 +75,12 @@ handle_shutdown (void *cls, GNUNET_TIME_UNIT_FOREVER_REL, &transmit_shutdown_ack, client); GNUNET_SERVER_client_persist_ (client); - GNUNET_SCHEDULER_shutdown (sched); + GNUNET_SCHEDULER_shutdown (); } static void run (void *cls, - struct GNUNET_SCHEDULER_Handle *s, struct GNUNET_SERVER_Handle *server, const struct GNUNET_CONFIGURATION_Handle *cfg) { @@ -92,7 +89,6 @@ run (void *cls, sizeof (struct GNUNET_MessageHeader)}, {NULL, NULL, 0, 0} }; - sched = s; /* process client requests */ GNUNET_SERVER_ignore_shutdown (server, GNUNET_YES); GNUNET_SERVER_add_handlers (server, handlers); diff --git a/src/arm/test_arm_api.c b/src/arm/test_arm_api.c index 6ec95f4a0..6952b2e59 100644 --- a/src/arm/test_arm_api.c +++ b/src/arm/test_arm_api.c @@ -38,8 +38,6 @@ #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 15) -static struct GNUNET_SCHEDULER_Handle *sched; - static const struct GNUNET_CONFIGURATION_Handle *cfg; static struct GNUNET_ARM_Handle *arm; @@ -95,8 +93,7 @@ resolver_notify (void *cls, int success) #endif return; } - GNUNET_RESOLVER_ip_get (sched, - cfg, + GNUNET_RESOLVER_ip_get (cfg, "localhost", AF_INET, TIMEOUT, &dns_notify, NULL); } @@ -118,14 +115,12 @@ arm_notify (void *cls, int success) static void task (void *cls, - struct GNUNET_SCHEDULER_Handle *s, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { cfg = c; - sched = s; - arm = GNUNET_ARM_connect (cfg, sched, NULL); + arm = GNUNET_ARM_connect (cfg, NULL); #if START_ARM GNUNET_ARM_start_service (arm, "arm", START_TIMEOUT, &arm_notify, NULL); #else diff --git a/src/arm/test_exponential_backoff.c b/src/arm/test_exponential_backoff.c index dd32f6a5d..8e5ac9bc1 100644 --- a/src/arm/test_exponential_backoff.c +++ b/src/arm/test_exponential_backoff.c @@ -35,7 +35,6 @@ #define SERVICE_TEST_TIMEOUT GNUNET_TIME_UNIT_FOREVER_REL #define FIVE_MILLISECONDS GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 5) -static struct GNUNET_SCHEDULER_Handle *sched; static const struct GNUNET_CONFIGURATION_Handle *cfg; static struct GNUNET_ARM_Handle *arm; static int ok = 1; @@ -55,10 +54,6 @@ static char *killLogFileName; */ struct ShutdownContext { - /** - * Scheduler to be used to call continuation - */ - struct GNUNET_SCHEDULER_Handle *sched; /** * Connection to the service that is being shutdown. */ @@ -114,7 +109,7 @@ service_shutdown_handler (void *cls, const struct GNUNET_MessageHeader *msg) "Service handle shutdown before ACK!\n"); if (shutdown_ctx->cont != NULL) shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_SYSERR); - GNUNET_SCHEDULER_cancel(shutdown_ctx->sched, shutdown_ctx->cancel_task); + GNUNET_SCHEDULER_cancel(shutdown_ctx->cancel_task); GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO); GNUNET_free(shutdown_ctx); } @@ -127,7 +122,7 @@ service_shutdown_handler (void *cls, const struct GNUNET_MessageHeader *msg) if (shutdown_ctx->cont != NULL) shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_NO); - GNUNET_SCHEDULER_cancel(shutdown_ctx->sched, shutdown_ctx->cancel_task); + GNUNET_SCHEDULER_cancel(shutdown_ctx->cancel_task); GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO); GNUNET_free(shutdown_ctx); } @@ -153,7 +148,7 @@ service_shutdown_handler (void *cls, const struct GNUNET_MessageHeader *msg) if (shutdown_ctx->cont != NULL) shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_YES); - GNUNET_SCHEDULER_cancel(shutdown_ctx->sched, shutdown_ctx->cancel_task); + GNUNET_SCHEDULER_cancel(shutdown_ctx->cancel_task); GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO); GNUNET_free(shutdown_ctx); break; @@ -206,8 +201,7 @@ write_shutdown (void *cls, size_t size, void *buf) GNUNET_CLIENT_receive (shutdown_ctx->sock, &service_shutdown_handler, shutdown_ctx, GNUNET_TIME_UNIT_FOREVER_REL); - shutdown_ctx->cancel_task = GNUNET_SCHEDULER_add_delayed (shutdown_ctx->sched, - GNUNET_TIME_absolute_get_remaining(shutdown_ctx->timeout), + shutdown_ctx->cancel_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_absolute_get_remaining(shutdown_ctx->timeout), &service_shutdown_cancel, shutdown_ctx); msg = (struct GNUNET_MessageHeader *) buf; @@ -224,7 +218,6 @@ write_shutdown (void *cls, size_t size, void *buf) * be used by the caller after this call * (calling this function frees "sock" after a while). * - * @param sched the scheduler to use for calling shutdown continuation * @param sock the socket connected to the service * @param timeout how long to wait before giving up on transmission * @param cont continuation to call once the service is really down @@ -232,15 +225,13 @@ write_shutdown (void *cls, size_t size, void *buf) * */ static void -arm_service_shutdown (struct GNUNET_SCHEDULER_Handle *sched, - struct GNUNET_CLIENT_Connection *sock, +arm_service_shutdown (struct GNUNET_CLIENT_Connection *sock, struct GNUNET_TIME_Relative timeout, GNUNET_CLIENT_ShutdownTask cont, void *cont_cls) { struct ShutdownContext *shutdown_ctx; shutdown_ctx = GNUNET_malloc(sizeof(struct ShutdownContext)); - shutdown_ctx->sched = sched; shutdown_ctx->cont = cont; shutdown_ctx->cont_cls = cont_cls; shutdown_ctx->sock = sock; @@ -274,7 +265,7 @@ do_nothing_notify (void *cls, int success) { GNUNET_assert (success == GNUNET_YES); ok = 1; - GNUNET_SCHEDULER_add_delayed (sched, GNUNET_TIME_UNIT_SECONDS, + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &kill_task, NULL); } @@ -322,7 +313,7 @@ do_nothing_restarted_notify_task (void *cls, trialCount); } #endif - GNUNET_SCHEDULER_add_now (sched, &kill_task, &a); + GNUNET_SCHEDULER_add_now (&kill_task, &a); } @@ -330,7 +321,7 @@ static void do_test (void *cbData, const struct GNUNET_SCHEDULER_TaskContext *tc) { - GNUNET_CLIENT_service_test(sched, "do-nothing", + GNUNET_CLIENT_service_test("do-nothing", cfg, TIMEOUT, &do_nothing_restarted_notify_task, NULL); } @@ -341,8 +332,7 @@ shutdown_cont (void *cls, int reason) { trialCount++; startedWaitingAt = GNUNET_TIME_absolute_get(); - GNUNET_SCHEDULER_add_delayed (sched, - waitedFor, + GNUNET_SCHEDULER_add_delayed (waitedFor, &do_test, NULL); } @@ -369,7 +359,7 @@ kill_task (void *cbData, waitedFor.rel_value = 0; } /* Connect to the doNothing task */ - doNothingConnection = GNUNET_CLIENT_connect (sched, "do-nothing", cfg); + doNothingConnection = GNUNET_CLIENT_connect ("do-nothing", cfg); #if LOG_BACKOFF if (NULL == doNothingConnection) fprintf(killLogFilePtr, @@ -385,8 +375,7 @@ kill_task (void *cbData, } /* Use the created connection to kill the doNothingTask */ - arm_service_shutdown(sched, - doNothingConnection, + arm_service_shutdown(doNothingConnection, TIMEOUT, &shutdown_cont, NULL); } @@ -394,15 +383,13 @@ kill_task (void *cbData, static void task (void *cls, - struct GNUNET_SCHEDULER_Handle *s, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { cfg = c; - sched = s; - arm = GNUNET_ARM_connect (cfg, sched, NULL); + arm = GNUNET_ARM_connect (cfg,NULL); #if START_ARM GNUNET_ARM_start_service (arm, "arm", GNUNET_TIME_UNIT_ZERO, &arm_notify, NULL); #else diff --git a/src/arm/test_gnunet_service_manager.c b/src/arm/test_gnunet_service_manager.c index 26ea774d6..e4aecb8c4 100644 --- a/src/arm/test_gnunet_service_manager.c +++ b/src/arm/test_gnunet_service_manager.c @@ -43,7 +43,6 @@ static int ret = 1; -static struct GNUNET_SCHEDULER_Handle *sched; static const struct GNUNET_CONFIGURATION_Handle *cfg; @@ -108,8 +107,7 @@ arm_notify (void *cls, int success) GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Trying to resolve our own hostname!\n"); /* connect to the resolver service */ - if (NULL == GNUNET_RESOLVER_hostname_resolve (sched, - cfg, AF_UNSPEC, + if (NULL == GNUNET_RESOLVER_hostname_resolve (cfg, AF_UNSPEC, TIMEOUT, &hostNameResolveCB, NULL)) @@ -125,16 +123,14 @@ arm_notify (void *cls, int success) static void -run(void *cls, - struct GNUNET_SCHEDULER_Handle *s, +run(void *cls, char * const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { cfg = c; - sched = s; #if START_ARM - arm = GNUNET_ARM_connect (cfg, sched, NULL); + arm = GNUNET_ARM_connect (cfg, NULL); GNUNET_ARM_start_service (arm, "arm", START_TIMEOUT, &arm_notify, NULL); #else arm_notify (NULL, GNUNET_YES); -- cgit v1.2.3