typedef void ap_reclaim_callback_fn_t(int childnum, pid_t pid,
ap_generation_t gen);
+#ifndef NETWARE
/**
* Make sure all child processes that have been spawned by the parent process
* have died. This includes process registered as "other_children".
* in the scoreboard as well as those currently registered via
* ap_register_extra_mpm_process().
*/
-void ap_reclaim_child_processes(int terminate,
- ap_reclaim_callback_fn_t *mpm_callback);
+AP_DECLARE(void) ap_reclaim_child_processes(int terminate,
+ ap_reclaim_callback_fn_t *mpm_callback);
/**
* Catch any child processes that have been spawned by the parent process
* in the scoreboard as well as those currently registered via
* ap_register_extra_mpm_process().
*/
-void ap_relieve_child_processes(ap_reclaim_callback_fn_t *mpm_callback);
+AP_DECLARE(void) ap_relieve_child_processes(ap_reclaim_callback_fn_t *mpm_callback);
/**
* Tell ap_reclaim_child_processes() and ap_relieve_child_processes() about
* ap_reclaim_child_processes(), remove it from the list of such processes
* by calling ap_unregister_extra_mpm_process().
*/
-void ap_register_extra_mpm_process(pid_t pid, ap_generation_t gen);
+AP_DECLARE(void) ap_register_extra_mpm_process(pid_t pid, ap_generation_t gen);
/**
* Unregister an MPM child process which was previously registered by a
* @param old_gen Set to the server generation of the process, if found.
* @return 1 if the process was found and removed, 0 otherwise
*/
-int ap_unregister_extra_mpm_process(pid_t pid, ap_generation_t *old_gen);
-
-/**
- * Pool cleanup for end-generation hook implementation
- */
-apr_status_t ap_mpm_end_gen_helper(void *unused);
+AP_DECLARE(int) ap_unregister_extra_mpm_process(pid_t pid, ap_generation_t *old_gen);
/**
* Safely signal an MPM child process, if the process is in the
* APR_EINVAL is returned if passed either an invalid (< 1) pid, or if
* the pid is not in the current process group
*/
-apr_status_t ap_mpm_safe_kill(pid_t pid, int sig);
+AP_DECLARE(apr_status_t) ap_mpm_safe_kill(pid_t pid, int sig);
+
+/**
+ * Log why a child died to the error log, if the child died without the
+ * parent signalling it.
+ * @param pid The child that has died
+ * @param why The return code of the child process
+ * @param status The status returned from ap_wait_or_timeout
+ * @return 0 on success, APEXIT_CHILDFATAL if MPM should terminate
+ */
+AP_DECLARE(int) ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status);
+
+AP_DECLARE(apr_status_t) ap_fatal_signal_setup(server_rec *s, apr_pool_t *pconf);
+AP_DECLARE(apr_status_t) ap_fatal_signal_child_setup(server_rec *s);
+#endif /* !NETWARE */
+
+/**
+ * Pool cleanup for end-generation hook implementation
+ * (core httpd function)
+ */
+apr_status_t ap_mpm_end_gen_helper(void *unused);
/**
* Run the monitor hook (once every ten calls), determine if any child
* @param p The pool to allocate out of
* @param s The server_rec to pass
*/
-void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret,
- apr_pool_t *p, server_rec *s);
-
-/**
- * Log why a child died to the error log, if the child died without the
- * parent signalling it.
- * @param pid The child that has died
- * @param why The return code of the child process
- * @param status The status returned from ap_wait_or_timeout
- * @return 0 on success, APEXIT_CHILDFATAL if MPM should terminate
- */
-int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status);
+AP_DECLARE(void) ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode,
+ apr_proc_t *ret, apr_pool_t *p,
+ server_rec *s);
#if defined(TCP_NODELAY)
/**
* The maximum number of requests each child thread or
* process handles before dying off
*/
-extern int ap_max_requests_per_child;
+AP_DECLARE_DATA extern int ap_max_requests_per_child;
const char *ap_mpm_set_max_requests(cmd_parms *cmd, void *dummy,
const char *arg);
/**
* The filename used to store the process id.
*/
-extern const char *ap_pid_fname;
+AP_DECLARE_DATA extern const char *ap_pid_fname;
const char *ap_mpm_set_pidfile(cmd_parms *cmd, void *dummy,
const char *arg);
void ap_mpm_dump_pidfile(apr_pool_t *p, apr_file_t *out);
/*
* The directory that the server changes directory to dump core.
*/
-extern char ap_coredump_dir[MAX_STRING_LEN];
-extern int ap_coredumpdir_configured;
+AP_DECLARE_DATA extern char ap_coredump_dir[MAX_STRING_LEN];
+AP_DECLARE_DATA extern int ap_coredumpdir_configured;
const char *ap_mpm_set_coredumpdir(cmd_parms *cmd, void *dummy,
const char *arg);
/**
* Set the timeout period for a graceful shutdown.
*/
-extern int ap_graceful_shutdown_timeout;
-const char *ap_mpm_set_graceful_shutdown(cmd_parms *cmd, void *dummy,
+AP_DECLARE_DATA extern int ap_graceful_shutdown_timeout;
+AP_DECLARE(const char *)ap_mpm_set_graceful_shutdown(cmd_parms *cmd, void *dummy,
const char *arg);
#define AP_GRACEFUL_SHUTDOWN_TIMEOUT_COMMAND \
AP_INIT_TAKE1("GracefulShutdownTimeout", ap_mpm_set_graceful_shutdown, NULL, \
int ap_signal_server(int *, apr_pool_t *);
void ap_mpm_rewrite_args(process_rec *);
-extern AP_DECLARE_DATA apr_uint32_t ap_max_mem_free;
+AP_DECLARE_DATA extern apr_uint32_t ap_max_mem_free;
extern const char *ap_mpm_set_max_mem_free(cmd_parms *cmd, void *dummy,
const char *arg);
-extern apr_size_t ap_thread_stacksize;
+AP_DECLARE_DATA extern apr_size_t ap_thread_stacksize;
extern const char *ap_mpm_set_thread_stacksize(cmd_parms *cmd, void *dummy,
const char *arg);
-extern apr_status_t ap_fatal_signal_setup(server_rec *s, apr_pool_t *pconf);
-extern apr_status_t ap_fatal_signal_child_setup(server_rec *s);
-
/* core's implementation of child_status hook */
extern void ap_core_child_status(server_rec *s, pid_t pid, ap_generation_t gen,
int slot, mpm_child_status status);
static int gen_head_init; /* yuck */
/* variables representing config directives implemented here */
-const char *ap_pid_fname;
-int ap_max_requests_per_child;
-char ap_coredump_dir[MAX_STRING_LEN];
-int ap_coredumpdir_configured;
-int ap_graceful_shutdown_timeout;
+AP_DECLARE_DATA const char *ap_pid_fname;
+AP_DECLARE_DATA int ap_max_requests_per_child;
+AP_DECLARE_DATA char ap_coredump_dir[MAX_STRING_LEN];
+AP_DECLARE_DATA int ap_coredumpdir_configured;
+AP_DECLARE_DATA int ap_graceful_shutdown_timeout;
AP_DECLARE_DATA apr_uint32_t ap_max_mem_free;
-apr_size_t ap_thread_stacksize;
+AP_DECLARE_DATA apr_size_t ap_thread_stacksize;
#define ALLOCATOR_MAX_FREE_DEFAULT (2048*1024)
#endif
static int wait_or_timeout_counter;
-void ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode, apr_proc_t *ret,
- apr_pool_t *p, server_rec *s)
+AP_DECLARE(void) ap_wait_or_timeout(apr_exit_why_e *status, int *exitcode,
+ apr_proc_t *ret, apr_pool_t *p,
+ server_rec *s)
{
apr_status_t rv;
return NULL;
}
-const char * ap_mpm_set_graceful_shutdown(cmd_parms *cmd, void *dummy,
- const char *arg)
+AP_DECLARE(const char *)ap_mpm_set_graceful_shutdown(cmd_parms *cmd,
+ void *dummy,
+ const char *arg)
{
const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
if (err != NULL) {
static extra_process_t *extras;
-void ap_register_extra_mpm_process(pid_t pid, ap_generation_t gen)
+AP_DECLARE(void) ap_register_extra_mpm_process(pid_t pid, ap_generation_t gen)
{
extra_process_t *p = (extra_process_t *)ap_malloc(sizeof(extra_process_t));
extras = p;
}
-int ap_unregister_extra_mpm_process(pid_t pid, ap_generation_t *gen)
+AP_DECLARE(int) ap_unregister_extra_mpm_process(pid_t pid, ap_generation_t *old_gen)
{
extra_process_t *cur = extras;
extra_process_t *prev = NULL;
return 0;
}
-void ap_reclaim_child_processes(int terminate,
- ap_reclaim_callback_fn_t *mpm_callback)
+AP_DECLARE(void) ap_reclaim_child_processes(int terminate,
+ ap_reclaim_callback_fn_t *mpm_callback)
{
apr_time_t waittime = 1024 * 16;
int i;
action_table[cur_action].action != GIVEUP);
}
-void ap_relieve_child_processes(ap_reclaim_callback_fn_t *mpm_callback)
+AP_DECLARE(void) ap_relieve_child_processes(ap_reclaim_callback_fn_t *mpm_callback)
{
int i;
extra_process_t *cur_extra;
* the pid is a member of the current process group; either using
* apr_proc_wait(), where waitpid() guarantees to fail for non-child
* processes; or by using getpgid() directly, if available. */
-apr_status_t ap_mpm_safe_kill(pid_t pid, int sig)
+AP_DECLARE(apr_status_t) ap_mpm_safe_kill(pid_t pid, int sig)
{
#ifndef HAVE_GETPGID
apr_proc_t proc;
}
-int ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why, int status)
+AP_DECLARE(int) ap_process_child_status(apr_proc_t *pid, apr_exit_why_e why,
+ int status)
{
int signum = status;
const char *sigdesc;
*/
}
-apr_status_t ap_fatal_signal_child_setup(server_rec *s)
+AP_DECLARE(apr_status_t) ap_fatal_signal_child_setup(server_rec *s)
{
my_pid = getpid();
return APR_SUCCESS;
}
-apr_status_t ap_fatal_signal_setup(server_rec *s, apr_pool_t *in_pconf)
+AP_DECLARE(apr_status_t) ap_fatal_signal_setup(server_rec *s,
+ apr_pool_t *pconf)
{
#ifndef NO_USE_SIGACTION
struct sigaction sa;