aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgrothoff <grothoff@140774ce-b5e7-0310-ab8b-a85725594a96>2010-11-02 10:27:12 +0000
committergrothoff <grothoff@140774ce-b5e7-0310-ab8b-a85725594a96>2010-11-02 10:27:12 +0000
commit776c56be83ceb4d77d783b33966a8ddd4d8f653c (patch)
treef515f183920fda5039b51faca1e703f9495fd8be /src
parent7af0fadeaabab4adc801b3a26b65429d42e8e9c8 (diff)
need longer timeout, better error message
git-svn-id: https://gnunet.org/svn/gnunet@13488 140774ce-b5e7-0310-ab8b-a85725594a96
Diffstat (limited to 'src')
-rw-r--r--src/arm/arm_api.c33
-rw-r--r--src/arm/gnunet-arm.c7
2 files changed, 27 insertions, 13 deletions
diff --git a/src/arm/arm_api.c b/src/arm/arm_api.c
index dda5561ac0..fb4f3a02db 100644
--- a/src/arm/arm_api.c
+++ b/src/arm/arm_api.c
@@ -66,6 +66,7 @@ struct ShutdownContext
* Scheduler to be used to call continuation
*/
struct GNUNET_SCHEDULER_Handle *sched;
+
/**
* Connection to the service that is being shutdown.
*/
@@ -79,7 +80,7 @@ struct ShutdownContext
/**
* Task set up to cancel the shutdown request on timeout.
*/
- GNUNET_SCHEDULER_TaskIdentifier cancel_task;
+ GNUNET_SCHEDULER_TaskIdentifier timeout_task;
/**
* Task to call once shutdown complete
@@ -98,6 +99,7 @@ struct ShutdownContext
};
+
/**
* Handler receiving response to service shutdown requests.
* First call with NULL: service misbehaving, or something.
@@ -110,7 +112,8 @@ 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;
@@ -121,7 +124,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->sched, shutdown_ctx->timeout_task);
GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO);
GNUNET_free(shutdown_ctx);
}
@@ -134,7 +137,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->sched, shutdown_ctx->timeout_task);
GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO);
GNUNET_free(shutdown_ctx);
}
@@ -162,7 +165,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->sched, shutdown_ctx->timeout_task);
GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO);
GNUNET_free(shutdown_ctx);
break;
@@ -170,17 +173,21 @@ service_shutdown_handler (void *cls, const struct GNUNET_MessageHeader *msg)
}
}
+
/**
* Shutting down took too long, cancel receive and return error.
*
* @param cls closure
* @param tc context information (why was this task triggered now)
*/
-void service_shutdown_cancel (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext * tc)
+static void
+service_shutdown_timeout (void *cls,
+ const struct GNUNET_SCHEDULER_TaskContext * tc)
{
struct ShutdownContext *shutdown_ctx = cls;
- GNUNET_log(GNUNET_ERROR_TYPE_WARNING, "service_shutdown_cancel called!\n");
+
+ GNUNET_log(GNUNET_ERROR_TYPE_WARNING,
+ _("Timeout during attempt to shutdown service. Hoping it is simply down already.\n"));
shutdown_ctx->cont(shutdown_ctx->cont_cls, GNUNET_SYSERR);
GNUNET_CLIENT_disconnect (shutdown_ctx->sock, GNUNET_NO);
GNUNET_free(shutdown_ctx);
@@ -215,10 +222,10 @@ 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),
- &service_shutdown_cancel,
- shutdown_ctx);
+ shutdown_ctx->timeout_task = GNUNET_SCHEDULER_add_delayed (shutdown_ctx->sched,
+ GNUNET_TIME_absolute_get_remaining(shutdown_ctx->timeout),
+ &service_shutdown_timeout,
+ shutdown_ctx);
msg = (struct GNUNET_MessageHeader *) buf;
msg->type = htons (GNUNET_MESSAGE_TYPE_ARM_SHUTDOWN);
msg->size = htons (sizeof (struct GNUNET_MessageHeader));
@@ -248,6 +255,7 @@ arm_service_shutdown (struct GNUNET_SCHEDULER_Handle *sched,
void *cont_cls)
{
struct ShutdownContext *shutdown_ctx;
+
shutdown_ctx = GNUNET_malloc(sizeof(struct ShutdownContext));
shutdown_ctx->sched = sched;
shutdown_ctx->cont = cont;
@@ -633,6 +641,7 @@ 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,
diff --git a/src/arm/gnunet-arm.c b/src/arm/gnunet-arm.c
index a9bf4a38ee..c19020ccb6 100644
--- a/src/arm/gnunet-arm.c
+++ b/src/arm/gnunet-arm.c
@@ -37,6 +37,11 @@
#define STOP_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1)
/**
+ * Timeout for stopping ARM. Extra-long since ARM needs to stop everyone else.
+ */
+#define STOP_TIMEOUT_ARM GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30)
+
+/**
* Timeout for starting services, very short because of the strange way start works
* (by checking if running before starting, so really this time is always waited on
* startup (annoying)).
@@ -304,7 +309,7 @@ cps_loop (void *cls,
case 1:
if ((end) || (restart))
{
- GNUNET_ARM_stop_service (h, "arm", STOP_TIMEOUT, &confirm_cb, "arm");
+ GNUNET_ARM_stop_service (h, "arm", STOP_TIMEOUT_ARM, &confirm_cb, "arm");
return;
}
break;