typedef struct MASTER_SERV {
int flags;
char *name;
int type;
int wakeup_time;
int *listen_fd;
int listen_fd_count;
union {
struct {
char *port;
struct INET_ADDR_LIST *addr;
} inet_ep;
#define MASTER_INET_ADDRLIST(s) ((s)->endpoint.inet_ep.addr)
#define MASTER_INET_PORT(s) ((s)->endpoint.inet_ep.port)
} endpoint;
int max_proc;
char *path;
struct ARGV *args;
int avail_proc;
int total_proc;
int throttle_delay;
int status_fd[2];
struct BINHASH *children;
struct MASTER_SERV *next;
} MASTER_SERV;
#define MASTER_FLAG_THROTTLE (1<<0)
#define MASTER_FLAG_MARK (1<<1)
#define MASTER_FLAG_CONDWAKE (1<<2)
#define MASTER_FLAG_INETHOST (1<<3)
#define MASTER_THROTTLED(f) ((f)->flags & MASTER_FLAG_THROTTLE)
#define MASTER_LIMIT_OK(limit, count) ((limit) == 0 || ((count) < (limit)))
#define MASTER_SERV_TYPE_UNIX 1
#define MASTER_SERV_TYPE_INET 2
#define MASTER_SERV_TYPE_FIFO 3
#define MASTER_DEF_MIN_IDLE 1
typedef int MASTER_PID;
typedef struct MASTER_PROC {
MASTER_PID pid;
int avail;
MASTER_SERV *serv;
int use_count;
} MASTER_PROC;
#define MASTER_BUF_LEN 2048
extern void fset_master_ent(char *);
extern void set_master_ent(void);
extern void end_master_ent(void);
extern void print_master_ent(MASTER_SERV *);
extern MASTER_SERV *get_master_ent(void);
extern void free_master_ent(MASTER_SERV *);
extern void master_config(void);
extern void master_refresh(void);
extern char *var_program_dir;
extern int var_proc_limit;
extern int var_use_limit;
extern int var_idle_limit;
extern void master_vars_init(void);
extern MASTER_SERV *master_head;
extern void master_start_service(MASTER_SERV *);
extern void master_stop_service(MASTER_SERV *);
extern void master_restart_service(MASTER_SERV *);
extern int master_gotsighup;
extern int master_gotsigchld;
extern void master_sigsetup(void);
extern void master_status_init(MASTER_SERV *);
extern void master_status_cleanup(MASTER_SERV *);
extern void master_wakeup_init(MASTER_SERV *);
extern void master_wakeup_cleanup(MASTER_SERV *);
extern void master_listen_init(MASTER_SERV *);
extern void master_listen_cleanup(MASTER_SERV *);
extern void master_avail_listen(MASTER_SERV *);
extern void master_avail_cleanup(MASTER_SERV *);
extern void master_avail_more(MASTER_SERV *, MASTER_PROC *);
extern void master_avail_less(MASTER_SERV *, MASTER_PROC *);
extern struct BINHASH *master_child_table;
extern void master_spawn(MASTER_SERV *);
extern void master_reap_child(void);
extern void master_delete_children(MASTER_SERV *);
extern void master_flow_init(void);
extern int master_flow_pipe[2];