Browse Source

Fixed exit at FPM startup on fpm_resources_prepare

pull/271/head
Jérôme Loyet 15 years ago
parent
commit
eefbc4398a
  1. 8
      sapi/fpm/fpm/fpm.c
  2. 10
      sapi/fpm/fpm/fpm_children.c
  3. 9
      sapi/fpm/fpm/fpm_events.c
  4. 2
      sapi/fpm/fpm/fpm_events.h

8
sapi/fpm/fpm/fpm.c

@ -90,10 +90,16 @@ int fpm_run(int *max_requests) /* {{{ */
if (!is_parent) {
goto run_child;
}
/* handle error */
if (is_parent == 2) {
fpm_pctl(FPM_PCTL_STATE_TERMINATING, FPM_PCTL_ACTION_SET);
fpm_event_loop(1);
}
}
/* run event loop forever */
fpm_event_loop();
fpm_event_loop(0);
run_child: /* only workers reach this point */

10
sapi/fpm/fpm/fpm_children.c

@ -350,7 +350,6 @@ static void fpm_parent_resources_use(struct fpm_child_s *child) /* {{{ */
int fpm_children_make(struct fpm_worker_pool_s *wp, int in_event_loop, int nb_to_spawn, int is_debug) /* {{{ */
{
int enough = 0;
pid_t pid;
struct fpm_child_s *child;
int max;
@ -365,12 +364,11 @@ int fpm_children_make(struct fpm_worker_pool_s *wp, int in_event_loop, int nb_to
max = wp->config->pm_max_children;
}
while (!enough && fpm_pctl_can_spawn_children() && wp->running_children < max) {
while (fpm_pctl_can_spawn_children() && wp->running_children < max) {
child = fpm_resources_prepare(wp);
if (!child) {
enough = 1;
break;
return 2;
}
pid = fork();
@ -385,11 +383,9 @@ int fpm_children_make(struct fpm_worker_pool_s *wp, int in_event_loop, int nb_to
case -1 :
zlog(ZLOG_SYSERROR, "fork() failed");
enough = 1;
fpm_resources_discard(child);
break; /* dont try any more on error */
return 2;
default :
child->pid = pid;

9
sapi/fpm/fpm/fpm_events.c

@ -235,7 +235,7 @@ int fpm_event_init_main() /* {{{ */
}
/* }}} */
void fpm_event_loop() /* {{{ */
void fpm_event_loop(int err) /* {{{ */
{
static struct fpm_event_s signal_fd_event;
@ -249,9 +249,12 @@ void fpm_event_loop() /* {{{ */
/* add timers */
fpm_pctl_heartbeat(NULL, 0, NULL);
fpm_pctl_perform_idle_server_maintenance_heartbeat(NULL, 0, NULL);
zlog(ZLOG_NOTICE, "ready to handle connections");
if (!err) {
fpm_pctl_perform_idle_server_maintenance_heartbeat(NULL, 0, NULL);
zlog(ZLOG_NOTICE, "ready to handle connections");
}
while (1) {
struct fpm_event_queue_s *q, *q2;

2
sapi/fpm/fpm/fpm_events.h

@ -22,7 +22,7 @@ struct fpm_event_s {
short which; /* type of event */
};
void fpm_event_loop();
void fpm_event_loop(int err);
void fpm_event_fire(struct fpm_event_s *ev);
int fpm_event_init_main();
int fpm_event_set(struct fpm_event_s *ev, int fd, int flags, void (*callback)(struct fpm_event_s *, short, void *), void *arg);

Loading…
Cancel
Save