#include "gnunet_protocols.h"
#include "arm.h"
-/**
- * Threshold after which exponential backoff shouldn't increase (in ms); 30m
- */
-#define EXPONENTIAL_BACKOFF_THRESHOLD GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 30)
-
-
/**
* List of our services.
*/
struct ServiceListeningInfo *sli;
SOCKTYPE *lsocks;
unsigned int ls;
+ char *binary;
/* calculate listen socket list */
lsocks = NULL;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting service `%s' using binary `%s' and configuration `%s'\n",
sl->name, sl->binary, sl->config);
+ binary = GNUNET_OS_get_libexec_binary_path (sl->binary);
GNUNET_assert (NULL == sl->proc);
if (GNUNET_YES == use_debug)
- sl->proc =
- do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
- lsocks, loprefix, sl->binary, "-c", sl->config, "-L",
- "DEBUG", options, NULL);
+ {
+ if (NULL == sl->config)
+ sl->proc =
+ do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
+ lsocks, loprefix, binary, "-L",
+ "DEBUG", options, NULL);
+ else
+ sl->proc =
+ do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
+ lsocks, loprefix, binary, "-c", sl->config, "-L",
+ "DEBUG", options, NULL);
+ }
else
- sl->proc =
- do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
- lsocks, loprefix, sl->binary, "-c", sl->config,
- options, NULL);
+ {
+ if (NULL == sl->config)
+ sl->proc =
+ do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
+ lsocks, loprefix, binary,
+ options, NULL);
+ else
+ sl->proc =
+ do_start_process (sl->pipe_control, GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
+ lsocks, loprefix, binary, "-c", sl->config,
+ options, NULL);
+ }
+ GNUNET_free (binary);
if (sl->proc == NULL)
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Failed to start service `%s'\n"),
sl->name);
struct ServiceList *sl = sli->sl;
sli->accept_task = GNUNET_SCHEDULER_NO_TASK;
+ GNUNET_assert (GNUNET_NO == in_shutdown);
if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
return;
start_process (sl);
pos->name, statstr, statcode, pos->backoff.rel_value);
/* schedule restart */
pos->restart_at = GNUNET_TIME_relative_to_absolute (pos->backoff);
- pos->backoff =
- GNUNET_TIME_relative_min (EXPONENTIAL_BACKOFF_THRESHOLD,
- GNUNET_TIME_relative_multiply
- (pos->backoff, 2));
+ pos->backoff = GNUNET_TIME_STD_BACKOFF (pos->backoff);
}
if (GNUNET_SCHEDULER_NO_TASK != child_restart_task)
GNUNET_SCHEDULER_cancel (child_restart_task);
(GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_filename (cfg, "PATHS", "DEFAULTCONFIG",
&config)) ) ||
-
(0 != STAT (config, &sbuf)))
{
- if (NULL == config)
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_WARNING, section, "CONFIG");
- else
+ if (NULL != config)
+ {
GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_WARNING,
section, "CONFIG",
STRERROR (errno));
- GNUNET_free (binary);
- GNUNET_free_non_null (config);
- return;
+ GNUNET_free (config);
+ config = NULL;
+ }
}
sl = GNUNET_malloc (sizeof (struct ServiceList));
sl->name = GNUNET_strdup (section);