int fpm_php_init_main() /* {{{ */ { if (0 > fpm_cleanup_add(FPM_CLEANUP_PARENT, fpm_php_cleanup, 0)) { return -1; } return 0; }
int fpm_worker_pool_init_main() /* {{{ */ { if (0 > fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_worker_pool_cleanup, 0)) { return -1; } return 0; }
int fpm_event_init_main() { event_init(); zlog(ZLOG_STUFF, ZLOG_NOTICE, "libevent: using %s", event_get_method()); if (0 > fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_event_cleanup, 0)) { return -1; } return 0; }
int fpm_children_init_main() /* {{{ */ { if (fpm_global_config.emergency_restart_threshold && fpm_global_config.emergency_restart_interval) { last_faults = malloc(sizeof(time_t) * fpm_global_config.emergency_restart_threshold); if (!last_faults) { return -1; } memset(last_faults, 0, sizeof(time_t) * fpm_global_config.emergency_restart_threshold); } if (0 > fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_children_cleanup, 0)) { return -1; } return 0; }
int fpm_sockets_init_main() /* {{{ */ { unsigned i, lq_len; struct fpm_worker_pool_s *wp; char *inherited = getenv("FPM_SOCKETS"); struct listening_socket_s *ls; if (0 == fpm_array_init(&sockets_list, sizeof(struct listening_socket_s), 10)) { return -1; } /* import inherited sockets */ while (inherited && *inherited) { char *comma = strchr(inherited, ','); int type, fd_no; char *eq; if (comma) { *comma = '\0'; } eq = strchr(inherited, '='); if (eq) { *eq = '\0'; fd_no = atoi(eq + 1); type = fpm_sockets_domain_from_address(inherited); zlog(ZLOG_NOTICE, "using inherited socket fd=%d, \"%s\"", fd_no, inherited); fpm_sockets_hash_op(fd_no, 0, inherited, type, FPM_STORE_SOCKET); } if (comma) { inherited = comma + 1; } else { inherited = 0; } } /* create all required sockets */ for (wp = fpm_worker_all_pools; wp; wp = wp->next) { switch (wp->listen_address_domain) { case FPM_AF_INET : wp->listening_socket = fpm_socket_af_inet_listening_socket(wp); break; case FPM_AF_UNIX : if (0 > fpm_unix_resolve_socket_premissions(wp)) { return -1; } wp->listening_socket = fpm_socket_af_unix_listening_socket(wp); break; } if (wp->listening_socket == -1) { return -1; } if (wp->listen_address_domain == FPM_AF_INET && fpm_socket_get_listening_queue(wp->listening_socket, NULL, &lq_len) >= 0) { fpm_scoreboard_update(-1, -1, -1, (int)lq_len, -1, -1, 0, FPM_SCOREBOARD_ACTION_SET, wp->scoreboard); } } /* close unused sockets that was inherited */ ls = sockets_list.data; for (i = 0; i < sockets_list.used; ) { if (ls->refcount == 0) { close(ls->sock); if (ls->type == FPM_AF_UNIX) { unlink(ls->key); } free(ls->key); fpm_array_item_remove(&sockets_list, i); } else { ++i; ++ls; } } if (0 > fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_sockets_cleanup, 0)) { return -1; } return 0; }
int fpm_conf_init_main(int test_conf, int force_daemon) /* {{{ */ { int ret; if (fpm_globals.prefix && *fpm_globals.prefix) { if (!fpm_conf_is_dir(fpm_globals.prefix)) { zlog(ZLOG_ERROR, "the global prefix '%s' does not exist or is not a directory", fpm_globals.prefix); return -1; } } if (fpm_globals.pid && *fpm_globals.pid) { fpm_global_config.pid_file = strdup(fpm_globals.pid); } if (fpm_globals.config == NULL) { char *tmp; if (fpm_globals.prefix == NULL) { spprintf(&tmp, 0, "%s/php-fpm.conf", PHP_SYSCONFDIR); } else { spprintf(&tmp, 0, "%s/etc/php-fpm.conf", fpm_globals.prefix); } if (!tmp) { zlog(ZLOG_SYSERROR, "spprintf() failed (tmp for fpm_globals.config)"); return -1; } fpm_globals.config = strdup(tmp); efree(tmp); if (!fpm_globals.config) { zlog(ZLOG_SYSERROR, "spprintf() failed (fpm_globals.config)"); return -1; } } ret = fpm_conf_load_ini_file(fpm_globals.config); if (0 > ret) { zlog(ZLOG_ERROR, "failed to load configuration file '%s'", fpm_globals.config); return -1; } if (0 > fpm_conf_post_process(force_daemon)) { zlog(ZLOG_ERROR, "failed to post process the configuration"); return -1; } if (test_conf) { if (test_conf > 1) { fpm_conf_dump(); } zlog(ZLOG_NOTICE, "configuration file %s test is successful\n", fpm_globals.config); fpm_globals.test_successful = 1; return -1; } if (0 > fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_conf_cleanup, 0)) { return -1; } return 0; }
int fpm_worker_pool_init_main() { fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_worker_pool_cleanup, 0); return 0; }
int fpm_sockets_init_main() { int i; struct fpm_worker_pool_s *wp; char *inherited = getenv("FPM_SOCKETS"); struct listening_socket_s *ls; if (0 == fpm_array_init(&sockets_list, sizeof(struct listening_socket_s), 10)) { return -1; } /* import inherited sockets */ while (inherited && *inherited) { char *comma = strchr(inherited, ','); int type, fd_no; char *eq; if (comma) *comma = '\0'; eq = strchr(inherited, '='); if (eq) { *eq = '\0'; fd_no = atoi(eq + 1); type = fpm_sockets_domain_from_address(inherited); zlog(ZLOG_STUFF, ZLOG_NOTICE, "using inherited socket fd=%d, \"%s\"", fd_no, inherited); fpm_sockets_hash_op(fd_no, 0, inherited, type, FPM_STORE_SOCKET); } if (comma) inherited = comma + 1; else inherited = 0; } /* create all required sockets */ for (wp = fpm_worker_all_pools; wp; wp = wp->next) { if (!wp->is_template) { switch (wp->listen_address_domain) { case FPM_AF_INET : wp->listening_socket = fpm_socket_af_inet_listening_socket(wp); zlog(ZLOG_STUFF, ZLOG_NOTICE, "master process %d is listening sockfd %d ", getpid(), wp->listening_socket ); break; case FPM_AF_UNIX : if (0 > fpm_unix_resolve_socket_premissions(wp)) { return -1; } wp->listening_socket = fpm_socket_af_unix_listening_socket(wp); break; } if (wp->listening_socket == -1) { return -1; } } } /* close unused sockets that was inherited */ ls = sockets_list.data; for (i = 0; i < sockets_list.used; ) { if (ls->refcount == 0) { close(ls->sock); if (ls->type == FPM_AF_UNIX) { unlink(ls->key); } free(ls->key); fpm_array_item_remove(&sockets_list, i); } else { ++i; ++ls; } } fpm_cleanup_add(FPM_CLEANUP_ALL, fpm_sockets_cleanup, 0); return 0; }