60 static void master_status_event(
int event,
void *context)
62 const char *myname =
"master_status_event";
81 switch (n = read(serv->
status_fd[0], (
void *) &stat,
sizeof(stat))) {
92 msg_warn(
"service %s(%s): child (pid %d) sent partial status update (%d bytes)",
99 msg_info(
"%s: pid %d gen %u avail %d",
111 (
void *) &pid,
sizeof(pid))) == 0) {
113 msg_info(
"%s: process id not found: %d", myname, stat.
pid);
116 if (proc->
gen != stat.
gen) {
117 msg_info(
"ignoring status update from child pid %d generation %u",
121 if (proc->
serv != serv)
122 msg_panic(
"%s: pointer corruption: %p != %p",
123 myname, (
void *) proc->
serv, (
void *) serv);
133 switch (stat.
avail) {
142 msg_warn(
"%s: ignoring unknown status: %d allegedly from pid: %d",
152 const char *myname =
"master_status_init";
158 msg_panic(
"%s: status events already enabled", myname);
179 const char *myname =
"master_status_cleanup";
185 msg_panic(
"%s: status events not enabled", myname);
194 msg_warn(
"%s: close status descriptor (read side): %m", myname);
196 msg_warn(
"%s: close status descriptor (write side): %m", myname);
void event_enable_read(int fd, EVENT_NOTIFY_RDWR_FN callback, void *context)
NORETURN msg_panic(const char *fmt,...)
void master_status_init(MASTER_SERV *serv)
struct BINHASH * master_child_table
void master_avail_less(MASTER_SERV *, MASTER_PROC *)
void master_avail_more(MASTER_SERV *, MASTER_PROC *)
#define MASTER_STAT_AVAIL
#define MASTER_STAT_TAKEN
void master_status_cleanup(MASTER_SERV *serv)
void msg_warn(const char *fmt,...)
NORETURN msg_fatal(const char *fmt,...)
int duplex_pipe(int *fds)
int non_blocking(int, int)
void event_disable_readwrite(int fd)
int close_on_exec(int fd, int on)
void * binhash_find(BINHASH *table, const void *key, ssize_t key_len)
void msg_info(const char *fmt,...)