bool (*idle_die_callback)(void);
void (*die_callback)(void);
+ master_service_killed_callback_t *killed_callback;
+ void *killed_context;
+
struct timeout *to_die;
master_service_avail_overflow_callback_t *avail_overflow_callback;
stopped in the middle. */
if (service->callback != NULL)
io_loop_stop(service->ioloop);
+ if (service->killed_callback != NULL)
+ service->killed_callback(service->killed_context);
}
static bool sig_term_buf_get_kick_user(char *buf, const char **user_r)
"sigprocmask(SIG_SETMASK) failed: %m");
}
}
+
+#undef master_service_set_killed_callback
+void master_service_set_killed_callback(struct master_service *service,
+ master_service_killed_callback_t *callback,
+ void *context)
+{
+ service->killed_callback = callback;
+ service->killed_context = context;
+}
extern struct master_service *master_service;
+typedef void master_service_killed_callback_t(void *);
+
extern const struct option master_service_helpopt;
const char *master_service_getopt_string(void);
even called if the master service code knows that we're handling clients. */
void master_service_set_idle_die_callback(struct master_service *service,
bool (*callback)(void));
+/* Set a callback that gets called when the service is killed, but not dead yet. */
+void master_service_set_killed_callback(struct master_service *service,
+ master_service_killed_callback_t *callback,
+ void *context);
+#define master_service_set_killed_callback(service, callback, context) \
+ master_service_set_killed_callback(service, \
+ 1 ? (master_service_killed_callback_t *)callback : \
+ CALLBACK_TYPECHECK(callback, void (*)(typeof(context))), \
+ context)
+
/* Call the given callback when there are no available connections and master
has indicated that it can't create any more processes to handle requests. */
void master_service_set_avail_overflow_callback(struct master_service *service,