site_startup calls enter_state_run which would print a message, but
logging is not set up that early. The result is a message printed to
stderr before daemonisation.
We can distinguish this situation from other calls to enter_state_run
because the old state is SITE_STOP, which only occurs between config
reading (closure invocation) and site_startup being called.
So we can suppress this message.
But it did serve a purpose: it would only be printed if the site was
listed in `sites'; otherwise site_startup wouldn't be called and the
`entering state RUN' message would be absent.
So instead we provide a more explicit way to tell: on entering
PHASE_RUN, site_startup has either been called, or not. And logging
is set up. state is then STOP or RUN.
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
static void enter_state_run(struct site *st)
{
static void enter_state_run(struct site *st)
{
- slog(st,LOG_STATE,"entering state RUN%s",
- current_valid(st) ? " (keyed)" : " (unkeyed)");
+ if (st->state!=SITE_STOP)
+ slog(st,LOG_STATE,"entering state RUN%s",
+ current_valid(st) ? " (keyed)" : " (unkeyed)");
st->state=SITE_RUN;
st->timeout=0;
st->state=SITE_RUN;
st->timeout=0;
send_msg7(st,"shutting down");
}
send_msg7(st,"shutting down");
}
+static void site_phase_run_hook(void *sst, uint32_t newphase)
+{
+ struct site *st=sst;
+ slog(st,LOG_STATE,"entering phase RUN in state %s",
+ state_name(st->state));
+}
+
static void site_childpersist_clearkeys(void *sst, uint32_t newphase)
{
struct site *st=sst;
static void site_childpersist_clearkeys(void *sst, uint32_t newphase)
{
struct site *st=sst;
enter_state_stop(st);
add_hook(PHASE_SHUTDOWN,site_phase_shutdown_hook,st);
enter_state_stop(st);
add_hook(PHASE_SHUTDOWN,site_phase_shutdown_hook,st);
+ add_hook(PHASE_RUN, site_phase_run_hook, st);
add_hook(PHASE_CHILDPERSIST,site_childpersist_clearkeys,st);
return new_closure(&st->cl);
add_hook(PHASE_CHILDPERSIST,site_childpersist_clearkeys,st);
return new_closure(&st->cl);