From b4c94279d7f2ded17cccf7d4580bb6e7f46bbd9b Mon Sep 17 00:00:00 2001 From: Ryan Bloom Date: Mon, 31 Jul 2000 01:39:54 +0000 Subject: [PATCH] Make the Unix MPMs not clean the scoreboard on a graceful restart. This compiles, but it hasn't actually been tested yet. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@85957 13f79535-47bb-0310-9956-ffa450edef68 --- server/mpm/dexter/dexter.c | 5 ++++- server/mpm/dexter/scoreboard.c | 4 ++-- server/mpm/dexter/scoreboard.h | 2 ++ server/mpm/experimental/perchild/mpm.h | 2 +- server/mpm/experimental/perchild/perchild.c | 5 ++++- server/mpm/mpmt_pthread/mpmt_pthread.c | 5 ++++- server/mpm/mpmt_pthread/scoreboard.c | 4 ++-- server/mpm/mpmt_pthread/scoreboard.h | 2 +- server/mpm/perchild/mpm.h | 2 +- server/mpm/perchild/perchild.c | 5 ++++- server/mpm/perchild/scoreboard.c | 4 ++-- server/mpm/perchild/scoreboard.h | 1 + 12 files changed, 28 insertions(+), 13 deletions(-) diff --git a/server/mpm/dexter/dexter.c b/server/mpm/dexter/dexter.c index 1cf9f5fa64..7de8d0108d 100644 --- a/server/mpm/dexter/dexter.c +++ b/server/mpm/dexter/dexter.c @@ -249,7 +249,7 @@ void ap_start_shutdown(void) } /* do a graceful restart if graceful == 1 */ -void ap_start_restart(int graceful) +static void ap_start_restart(int graceful) { if (restart_pending == 1) { @@ -258,6 +258,9 @@ void ap_start_restart(int graceful) } restart_pending = 1; is_graceful = graceful; + if (is_graceful) { + ap_kill_cleanup(pconf, NULL, ap_cleanup_shared_mem); + } } static void sig_term(int sig) diff --git a/server/mpm/dexter/scoreboard.c b/server/mpm/dexter/scoreboard.c index ba85fd3c48..02e5dd8ed6 100644 --- a/server/mpm/dexter/scoreboard.c +++ b/server/mpm/dexter/scoreboard.c @@ -88,7 +88,7 @@ static scoreboard *ap_scoreboard_image = NULL; static ap_shmem_t *scoreboard_shm = NULL; -static ap_status_t cleanup_shared_mem(void *d) +ap_status_t ap_cleanup_shared_mem(void *d) { ap_shm_free(scoreboard_shm, ap_scoreboard_image); ap_scoreboard_image = NULL; @@ -116,7 +116,7 @@ static void setup_shared_mem(ap_pool_t *p) ap_shm_destroy(scoreboard_shm); exit(APEXIT_INIT); } - ap_register_cleanup(p, NULL, cleanup_shared_mem, ap_null_cleanup); + ap_register_cleanup(p, NULL, ap_cleanup_shared_mem, ap_null_cleanup); } void reinit_scoreboard(ap_pool_t *p) diff --git a/server/mpm/dexter/scoreboard.h b/server/mpm/dexter/scoreboard.h index 5fc598fb3d..73a54f1b6c 100644 --- a/server/mpm/dexter/scoreboard.h +++ b/server/mpm/dexter/scoreboard.h @@ -100,6 +100,8 @@ typedef struct { API_VAR_EXPORT extern const char *ap_scoreboard_fname; +ap_status_t ap_cleanup_shared_mem(void *d); + #ifdef __cplusplus } #endif diff --git a/server/mpm/experimental/perchild/mpm.h b/server/mpm/experimental/perchild/mpm.h index c5c74e74b7..062f83f68e 100644 --- a/server/mpm/experimental/perchild/mpm.h +++ b/server/mpm/experimental/perchild/mpm.h @@ -66,7 +66,7 @@ #define PERCHILD_MPM #define MPM_NEEDS_RECLAIM_CHILD_PROCESSES 1 -#define MPM_SYNC_CHILD_TABLE() (ap_sync_scoreboard_image()) +#define MPM_SYNC_CHILD_TABLE() #define MPM_CHILD_PID(i) (ap_child_table[i].pid) #define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0) diff --git a/server/mpm/experimental/perchild/perchild.c b/server/mpm/experimental/perchild/perchild.c index e68290d1a0..bc57ba7a56 100644 --- a/server/mpm/experimental/perchild/perchild.c +++ b/server/mpm/experimental/perchild/perchild.c @@ -282,7 +282,7 @@ void ap_start_shutdown(void) } /* do a graceful restart if graceful == 1 */ -void ap_start_restart(int graceful) +static void ap_start_restart(int graceful) { if (restart_pending == 1) { @@ -291,6 +291,9 @@ void ap_start_restart(int graceful) } restart_pending = 1; is_graceful = graceful; + if (is_graceful) { + ap_kill_cleanup(pconf, NULL, ap_cleanup_shared_mem); + } } static void sig_term(int sig) diff --git a/server/mpm/mpmt_pthread/mpmt_pthread.c b/server/mpm/mpmt_pthread/mpmt_pthread.c index 11e81420f9..7142bc7b54 100644 --- a/server/mpm/mpmt_pthread/mpmt_pthread.c +++ b/server/mpm/mpmt_pthread/mpmt_pthread.c @@ -246,7 +246,7 @@ void ap_start_shutdown(void) } /* do a graceful restart if graceful == 1 */ -void ap_start_restart(int graceful) +static void ap_start_restart(int graceful) { if (restart_pending == 1) { @@ -255,6 +255,9 @@ void ap_start_restart(int graceful) } restart_pending = 1; is_graceful = graceful; + if (is_graceful) { + ap_kill_cleanup(pconf, NULL, ap_cleanup_shared_mem); + } } static void sig_term(int sig) diff --git a/server/mpm/mpmt_pthread/scoreboard.c b/server/mpm/mpmt_pthread/scoreboard.c index 0775f24b9b..456dff247a 100644 --- a/server/mpm/mpmt_pthread/scoreboard.c +++ b/server/mpm/mpmt_pthread/scoreboard.c @@ -90,7 +90,7 @@ static int maintain_connection_status = 1; static ap_shmem_t *scoreboard_shm = NULL; -static ap_status_t cleanup_shared_mem(void *d) +ap_status_t ap_cleanup_shared_mem(void *d) { ap_shm_free(scoreboard_shm, ap_scoreboard_image); ap_scoreboard_image = NULL; @@ -120,7 +120,7 @@ static void setup_shared_mem(ap_pool_t *p) ap_shm_destroy(scoreboard_shm); exit(APEXIT_INIT); } - ap_register_cleanup(p, NULL, cleanup_shared_mem, ap_null_cleanup); + ap_register_cleanup(p, NULL, ap_cleanup_shared_mem, ap_null_cleanup); ap_scoreboard_image->global.running_generation = 0; } diff --git a/server/mpm/mpmt_pthread/scoreboard.h b/server/mpm/mpmt_pthread/scoreboard.h index 6c910c4af3..21e37e34dd 100644 --- a/server/mpm/mpmt_pthread/scoreboard.h +++ b/server/mpm/mpmt_pthread/scoreboard.h @@ -211,7 +211,7 @@ typedef struct { API_EXPORT(int) ap_exists_scoreboard_image(void); void reinit_scoreboard(ap_pool_t *p); -void cleanup_scoreboard(void); +ap_status_t ap_cleanup_shared_mem(void *d); API_EXPORT(void) ap_sync_scoreboard_image(void); void ap_mpmt_pthread_force_reset_connection_status(long conn_id); diff --git a/server/mpm/perchild/mpm.h b/server/mpm/perchild/mpm.h index c5c74e74b7..062f83f68e 100644 --- a/server/mpm/perchild/mpm.h +++ b/server/mpm/perchild/mpm.h @@ -66,7 +66,7 @@ #define PERCHILD_MPM #define MPM_NEEDS_RECLAIM_CHILD_PROCESSES 1 -#define MPM_SYNC_CHILD_TABLE() (ap_sync_scoreboard_image()) +#define MPM_SYNC_CHILD_TABLE() #define MPM_CHILD_PID(i) (ap_child_table[i].pid) #define MPM_NOTE_CHILD_KILLED(i) (MPM_CHILD_PID(i) = 0) diff --git a/server/mpm/perchild/perchild.c b/server/mpm/perchild/perchild.c index e68290d1a0..bc57ba7a56 100644 --- a/server/mpm/perchild/perchild.c +++ b/server/mpm/perchild/perchild.c @@ -282,7 +282,7 @@ void ap_start_shutdown(void) } /* do a graceful restart if graceful == 1 */ -void ap_start_restart(int graceful) +static void ap_start_restart(int graceful) { if (restart_pending == 1) { @@ -291,6 +291,9 @@ void ap_start_restart(int graceful) } restart_pending = 1; is_graceful = graceful; + if (is_graceful) { + ap_kill_cleanup(pconf, NULL, ap_cleanup_shared_mem); + } } static void sig_term(int sig) diff --git a/server/mpm/perchild/scoreboard.c b/server/mpm/perchild/scoreboard.c index a5d92c11d3..b44d29e260 100644 --- a/server/mpm/perchild/scoreboard.c +++ b/server/mpm/perchild/scoreboard.c @@ -88,7 +88,7 @@ static scoreboard *ap_scoreboard_image = NULL; static ap_shmem_t *scoreboard_shm = NULL; -static ap_status_t cleanup_shared_mem(void *d) +ap_status_t ap_cleanup_shared_mem(void *d) { ap_shm_free(scoreboard_shm, ap_scoreboard_image); ap_scoreboard_image = NULL; @@ -116,7 +116,7 @@ static void setup_shared_mem(ap_pool_t *p) ap_shm_destroy(scoreboard_shm); exit(APEXIT_INIT); } - ap_register_cleanup(p, NULL, cleanup_shared_mem, ap_null_cleanup); + ap_register_cleanup(p, NULL, ap_cleanup_shared_mem, ap_null_cleanup); } void reinit_scoreboard(ap_pool_t *p) diff --git a/server/mpm/perchild/scoreboard.h b/server/mpm/perchild/scoreboard.h index bcecfd6bcc..9e15e6a5cc 100644 --- a/server/mpm/perchild/scoreboard.h +++ b/server/mpm/perchild/scoreboard.h @@ -99,6 +99,7 @@ typedef struct { #define SCOREBOARD_SIZE sizeof(scoreboard) API_VAR_EXPORT extern const char *ap_scoreboard_fname; +ap_status_t ap_cleanup_shared_mem(void *d); #ifdef __cplusplus } -- 2.50.1