24#define APR_WANT_STRFUNC
30#if APR_HAVE_SYS_TYPES_H
56#ifdef HAVE_SYS_PROCESSOR_H
57#include <sys/processor.h>
74#ifndef DEFAULT_SERVER_LIMIT
75#define DEFAULT_SERVER_LIMIT 256
81#ifndef MAX_SERVER_LIMIT
82#define MAX_SERVER_LIMIT 200000
85#ifndef HARD_THREAD_LIMIT
86#define HARD_THREAD_LIMIT 1
119#ifndef MAX_SPAWN_RATE
120#define MAX_SPAWN_RATE (32)
134#define MPM_CHILD_PID(i) (ap_scoreboard_image->parent[i].pid)
173 int len = strlen(
sconf->gprof_dir) - 1;
185 "gprof: error creating directory %s",
dir);
195#define chdir_for_gprof()
247 const char *msg =
"couldn't grab the accept mutex";
266 const char *msg =
"couldn't release the accept mutex";
289#ifdef SINGLE_LISTEN_UNSERIALIZED_ACCEPT
290#define SAFE_ACCEPT(stmt) (ap_listeners->next ? (stmt) : APR_SUCCESS)
292#define SAFE_ACCEPT(stmt) (stmt)
386#if defined(SIGPROCMASK_SETS_THREAD_MASK)
429#if AP_HAS_THREAD_LOCAL
435 "Couldn't initialize child main thread");
467 "Couldn't initialize cross-process lock in child "
488 "Couldn't initialize signal thread");
512 "Couldn't create pollset in child; check system or user limits");
532 "Couldn't add listener to pollset; check system or user limits");
718 if ((pid =
fork()) == -1) {
738#if AP_HAS_THREAD_LOCAL
744#ifdef HAVE_BINDPROCESSOR
861 "server reached MaxRequestWorkers setting, consider"
862 " raising the MaxRequestWorkers setting");
870 "server seems busy, (you may need "
871 "to increase StartServers, or Min/MaxSpareServers), "
872 "spawning %d children, there are %d idle, and "
964 "%s configured -- resuming normal operations",
971 "Accept mutex: %s (default: %s)",
1009 "Ignoring fatal error in child of previous "
1010 "generation (pid %ld).",
1034#if APR_HAS_OTHER_CHILD
1047 "long lost child came home! (pid %ld)", (
long)pid.
pid);
1088 "caught SIGTERM, shutting down");
1177 "Graceful restart requested, doing restart");
1211 "SIGHUP received. Attempting to restart");
1239 (startup ?
NULL :
s),
1240 "no listening sockets available, shutting down");
1254 (startup ?
NULL :
s),
1255 "could not duplicate listeners");
1263 (startup ?
NULL :
s),
1264 "could not open pipe-of-death");
1273 (startup ?
NULL :
s),
1274 "could not create accept mutex");
1326 "apr_proc_detach failed");
1358 "WARNING: ServerLimit of %d exceeds compile-time "
1359 "limit of %d servers, decreasing to %d.",
1363 "ServerLimit of %d exceeds compile-time limit "
1364 "of %d, decreasing to match",
1372 "WARNING: ServerLimit of %d not allowed, "
1376 "ServerLimit of %d not allowed, increasing to 1",
1391 "changing ServerLimit to %d from original value of %d "
1392 "not allowed during restart",
1400 "WARNING: MaxRequestWorkers of %d exceeds ServerLimit "
1401 "value of %d servers, decreasing MaxRequestWorkers to %d. "
1402 "To increase, please see the ServerLimit directive.",
1406 "MaxRequestWorkers of %d exceeds ServerLimit value "
1407 "of %d, decreasing to match",
1415 "WARNING: MaxRequestWorkers of %d not allowed, "
1419 "MaxRequestWorkers of %d not allowed, increasing to 1",
1429 "WARNING: StartServers of %d not allowed, "
1433 "StartServers of %d not allowed, increasing to 1",
1442 "WARNING: MinSpareServers of %d not allowed, "
1443 "increasing to 1 to avoid almost certain server failure. "
1447 "MinSpareServers of %d not allowed, increasing to 1",
1464 static const char *
const aszSucc[] = {
"core.c",
NULL};
1518 "MaxClients is deprecated, use MaxRequestWorkers "
1539 "Number of child processes launched at server startup"),
1541 "Minimum number of idle children, to handle request spikes"),
1543 "Maximum number of idle children"),
1545 "Deprecated name of MaxRequestWorkers"),
1547 "Maximum number of children alive at the same time"),
1549 "Maximum value of MaxRequestWorkers for this run of Apache"),
Symbol export macros and hook functions.
Apache Listeners Library.
Apache Multi-Processing Module library.
const char apr_size_t len
APR Portability Routines.
APR Thread and Process Library.
APR Standard Headers Support.
void ap_process_connection(conn_rec *c, void *csd)
void ap_lingering_close(conn_rec *c)
conn_rec * ap_run_create_connection(apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh, apr_bucket_alloc_t *alloc)
#define AP_INIT_TAKE1(directive, func, mconfig, where, help)
char * ap_runtime_dir_relative(apr_pool_t *p, const char *fname)
void ap_run_child_init(apr_pool_t *pchild, server_rec *s)
#define AP_DECLARE_MODULE(foo)
void ap_hook_open_logs(ap_HOOK_open_logs_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_check_config(ap_HOOK_check_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
char * ap_server_root_relative(apr_pool_t *p, const char *fname)
void ap_hook_pre_config(ap_HOOK_pre_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void * ap_retained_data_create(const char *key, apr_size_t size)
void * ap_retained_data_get(const char *key)
const char * ap_get_server_built(void)
const char * ap_get_server_description(void)
#define APEXIT_CHILDFATAL
int ap_exists_config_define(const char *name)
#define ap_get_core_module_config(v)
void ap_close_listeners(void)
void ap_close_listeners_ex(ap_listen_rec *listeners)
void ap_listen_pre_config(void)
apr_status_t ap_duplicate_listeners(apr_pool_t *p, server_rec *s, ap_listen_rec ***buckets, int *num_buckets)
int ap_setup_listeners(server_rec *s)
void ap_remove_pid(apr_pool_t *p, const char *fname)
void ap_log_mpm_common(server_rec *s)
void ap_log_pid(apr_pool_t *p, const char *fname)
void ap_log_command_line(apr_pool_t *p, server_rec *s)
server_rec * ap_server_conf
const unsigned char * buf
void ap_run_child_status(server_rec *s, pid_t pid, ap_generation_t gen, int slot, mpm_child_status state)
void ap_hook_mpm(ap_HOOK_mpm_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
apr_status_t ap_proc_mutex_create(apr_proc_mutex_t **mutex, const char **name, const char *type, const char *instance_id, server_rec *server, apr_pool_t *pool, apr_int32_t options)
apr_status_t ap_mutex_register(apr_pool_t *pconf, const char *type, const char *default_dir, apr_lockmech_e default_mech, apr_int32_t options)
#define DEFAULT_MAX_FREE_DAEMON
#define DEFAULT_MIN_FREE_DAEMON
#define DEFAULT_START_DAEMON
void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret, apr_pool_t *p, server_rec *s)
const char * ap_pid_fname
apr_status_t ap_mpm_safe_kill(pid_t pid, int sig)
#define AP_GRACEFUL_SHUTDOWN_TIMEOUT_COMMAND
#define AP_ACCEPT_MUTEX_TYPE
apr_status_t ap_mpm_pod_open(apr_pool_t *p, ap_pod_t **pod)
int ap_max_requests_per_child
apr_status_t ap_mpm_pod_close(ap_pod_t *pod)
#define AP_SIG_GRACEFUL_STOP_STRING
apr_status_t ap_mpm_pod_signal(ap_pod_t *pod)
void ap_run_child_stopping(apr_pool_t *pchild, int graceful)
void ap_hook_mpm_get_name(ap_HOOK_mpm_get_name_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_relieve_child_processes(ap_reclaim_callback_fn_t *mpm_callback)
int ap_graceful_shutdown_timeout
int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status)
void ap_reclaim_child_processes(int terminate, ap_reclaim_callback_fn_t *mpm_callback)
apr_status_t ap_fatal_signal_child_setup(server_rec *s)
void ap_mpm_pod_killpg(ap_pod_t *pod, int num)
void ap_hook_mpm_query(ap_HOOK_mpm_query_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
apr_uint32_t ap_max_mem_free
apr_status_t ap_fatal_signal_setup(server_rec *s, apr_pool_t *in_pconf)
int ap_run_drop_privileges(apr_pool_t *pchild, server_rec *s)
apr_status_t ap_mpm_pod_check(ap_pod_t *pod)
#define APR_OC_REASON_DEATH
#define APR_STATUS_IS_EINTR(s)
#define APR_STATUS_IS_EEXIST(s)
#define APR_STATUS_IS_TIMEUP(s)
apr_pool_t apr_dbd_t apr_dbd_results_t ** res
const char *const const char *const * aszSucc
#define APR_HOOK_REALLY_FIRST
#define HTTP_INTERNAL_SERVER_ERROR
#define MPM20_MODULE_STUFF
char * ap_append_pid(apr_pool_t *p, const char *string, const char *delim)
#define AP_DEBUG_ASSERT(exp)
const char * ap_check_cmd_context(cmd_parms *cmd, unsigned forbidden)
apr_array_header_t ** result
int strcasecmp(const char *a, const char *b)
apr_abortfunc_t apr_allocator_t * allocator
const char apr_status_t(*) apr_pool_t *poo __attribute__)((nonnull(2, 4)))
#define apr_pool_create(newpool, parent)
#define apr_pcalloc(p, size)
apr_int32_t apr_int32_t apr_int32_t err
int apr_exit_why_e * exitwhy
#define APR_PROC_DETACH_DAEMONIZE
#define APR_PROC_DETACH_FOREGROUND
#define apr_time_from_sec(sec)
#define APR_POLLSET_NOCOPY
#define AP_MPMQ_IS_FORKED
#define AP_MPMQ_MPM_STATE
#define AP_MPMQ_MAX_DAEMON_USED
#define AP_MPMQ_MAX_SPARE_DAEMONS
#define AP_MPMQ_MIN_SPARE_THREADS
#define AP_MPMQ_HARD_LIMIT_THREADS
#define AP_MPMQ_IS_THREADED
#define AP_MPMQ_MAX_THREADS
#define AP_MPMQ_MAX_REQUESTS_DAEMON
#define AP_MPMQ_MAX_SPARE_THREADS
#define AP_MPMQ_GENERATION
#define AP_MPMQ_MAX_DAEMONS
#define AP_MPMQ_HARD_LIMIT_DAEMONS
#define AP_MPMQ_MIN_SPARE_DAEMONS
#define AP_MPMQ_NOT_SUPPORTED
Apache connection library.
Multi-Processing Modules functions.
static int idle_spawn_rate
apr_status_t apr_proc_detach(int daemonize)
apr_os_thread_t apr_os_thread_current()
#define DEFAULT_SERVER_LIMIT
static const char * set_max_free_servers(cmd_parms *cmd, void *dummy, const char *arg)
static void startup_children(int number_to_start)
static const char * set_max_clients(cmd_parms *cmd, void *dummy, const char *arg)
static void perform_idle_server_maintenance(apr_pool_t *p)
static void prefork_note_child_started(int slot, pid_t pid)
static apr_pool_t * pchild
static apr_status_t accept_mutex_on(void)
static void just_die(int sig)
static void clean_child_exit(int code) __attribute__((noreturn))
static int volatile die_now
#define chdir_for_gprof()
static apr_pool_t * pconf
static void child_main(int child_num_arg, int child_bucket)
static prefork_child_bucket * all_buckets
static prefork_child_bucket * my_bucket
static const char * set_server_limit(cmd_parms *cmd, void *dummy, const char *arg)
static int prefork_open_logs(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static apr_status_t accept_mutex_off(void)
static int ap_daemons_limit
static int prefork_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s)
static void prefork_hooks(apr_pool_t *p)
static prefork_retained_data * retained
static int num_listensocks
static int make_child(server_rec *s, int slot)
static void prefork_note_child_killed(int childnum, pid_t pid, ap_generation_t gen)
static const char * set_min_free_servers(cmd_parms *cmd, void *dummy, const char *arg)
static const char * set_daemons_to_start(cmd_parms *cmd, void *dummy, const char *arg)
static int prefork_pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
#define HARD_THREAD_LIMIT
static const char * prefork_get_name(void)
static int ap_daemons_min_free
static int requests_this_child
static int ap_daemons_to_start
static void stop_listening(int sig)
static int prefork_check_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static int prefork_query(int query_code, int *result, apr_status_t *rv)
#define SAFE_ACCEPT(stmt)
static const command_rec prefork_cmds[]
static int ap_daemons_max_free
Apache scoreboard library.
void ap_create_sb_handle(ap_sb_handle_t **new_sbh, apr_pool_t *p, int child_num, int thread_num)
int ap_run_pre_mpm(apr_pool_t *p, ap_scoreboard_e sb_type)
scoreboard * ap_scoreboard_image
apr_status_t ap_reopen_scoreboard(apr_pool_t *p, apr_shm_t **shm, int detached)
int ap_update_child_status(ap_sb_handle_t *sbh, int status, request_rec *r)
int ap_update_child_status_from_indexes(int child_num, int thread_num, int status, request_rec *r)
int ap_find_child_by_pid(apr_proc_t *pid)
process_score * ap_get_scoreboard_process(int x)
Apache's listeners record.
Structure to store things which are per connection.
ap_generation_t running_generation
ap_listen_rec * listeners
int hold_off_on_exponential_spawning
ap_unixd_mpm_retained_data * mpm
ap_generation_t generation
A structure that represents the current request.
A structure to store information for each virtual server.
struct ap_conf_vector_t * module_config
static apr_pollset_t * pollset
apr_status_t apr_dir_make(const char *path, apr_fileperms_t perm, apr_pool_t *pool)
Apache Mutex support library.