static void fpm_worker_pool_cleanup(int which, void *arg) /* {{{ */ { struct fpm_worker_pool_s *wp, *wp_next; for (wp = fpm_worker_all_pools; wp; wp = wp_next) { wp_next = wp->next; fpm_worker_pool_config_free(wp->config); fpm_children_free(wp->children); if ((which & FPM_CLEANUP_CHILD) == 0 && fpm_globals.parent_pid == getpid()) { fpm_scoreboard_free(wp->scoreboard); } fpm_worker_pool_free(wp); } fpm_worker_all_pools = NULL; }
static void *fpm_worker_pool_config_alloc() /* {{{ */ { struct fpm_worker_pool_s *wp; wp = fpm_worker_pool_alloc(); if (!wp) { return 0; } wp->config = malloc(sizeof(struct fpm_worker_pool_config_s)); if (!wp->config) { fpm_worker_pool_free(wp); return 0; } memset(wp->config, 0, sizeof(struct fpm_worker_pool_config_s)); wp->config->listen_backlog = FPM_BACKLOG_DEFAULT; wp->config->pm_process_idle_timeout = 10; /* 10s by default */ wp->config->process_priority = 64; /* 64 means unset */ wp->config->clear_env = 1; if (!fpm_worker_all_pools) { fpm_worker_all_pools = wp; } else { struct fpm_worker_pool_s *tmp = fpm_worker_all_pools; while (tmp) { if (!tmp->next) { tmp->next = wp; break; } tmp = tmp->next; } } current_wp = wp; return wp->config; }