diff -ur mod_fcgid.2.0.orig/arch/unix/fcgid_pm_unix.c mod_fcgid.2.0/arch/unix/fcgid_pm_unix.c
--- mod_fcgid.2.0.orig/arch/unix/fcgid_pm_unix.c	2006-10-29 09:25:26.000000000 +0900
+++ mod_fcgid.2.0/arch/unix/fcgid_pm_unix.c	2007-08-24 14:34:55.727149445 +0900
@@ -38,6 +38,8 @@
 		g_caughtSigTerm = 1;
 		/* Tell the world it's time to die */
 		proctable_get_globalshare()->must_exit = 1;
+		if (signo == SIGHUP)
+		    proctable_get_globalshare()->is_graceful = 1;
 	}
 }
 
diff -ur mod_fcgid.2.0.orig/arch/unix/fcgid_proc_unix.c mod_fcgid.2.0/arch/unix/fcgid_proc_unix.c
--- mod_fcgid.2.0.orig/arch/unix/fcgid_proc_unix.c	2006-10-29 09:25:26.000000000 +0900
+++ mod_fcgid.2.0/arch/unix/fcgid_proc_unix.c	2007-08-24 14:44:02.643138877 +0900
@@ -383,7 +383,7 @@
 		kill(getpid(), SIGTERM);
 		return APR_EACCES;
 	}
-	rv = apr_proc_kill(procnode->proc_id, SIGTERM);
+	rv = apr_proc_kill(procnode->proc_id, SIGUSR1);
 	if (unixd_config.suexec_enabled && seteuid(unixd_config.user_id) != 0) {
 		kill(getpid(), SIGTERM);
 		return APR_EACCES;
diff -ur mod_fcgid.2.0.orig/arch/unix/fcgid_proctbl_unix.c mod_fcgid.2.0/arch/unix/fcgid_proctbl_unix.c
--- mod_fcgid.2.0.orig/arch/unix/fcgid_proctbl_unix.c	2006-10-29 09:25:26.000000000 +0900
+++ mod_fcgid.2.0/arch/unix/fcgid_proctbl_unix.c	2007-08-24 15:27:04.166133645 +0900
@@ -46,7 +46,7 @@
 	if ((rv =
 		 apr_global_mutex_create(&g_sharelock, tmpnam(g_sharelock_name),
 								 APR_LOCK_DEFAULT,
-								 main_server->process->pconf)) !=
+								 main_server->process->pool)) !=
 		APR_SUCCESS) {
 		ap_log_error(APLOG_MARK, APLOG_EMERG, rv, main_server,
 					 "mod_fcgid: Can't create global mutex");
@@ -63,6 +63,7 @@
 	g_global_share = &_global_memory->global;
 
 	g_global_share->must_exit = 0;
+	g_global_share->is_graceful = 0;
 
 	/* Init the array */
 	g_idle_list_header = g_proc_array;
@@ -144,7 +145,7 @@
 {
 	apr_status_t rv;
 
-	if (g_global_share->must_exit) {
+	if (g_global_share->must_exit && !g_global_share->is_graceful) {
 		ap_log_error(APLOG_MARK, APLOG_EMERG, 0, main_server,
 					 "mod_fcgid: server is restarted, %d must exit",
 					 getpid());
diff -ur mod_fcgid.2.0.orig/fcgid_proctbl.h mod_fcgid.2.0/fcgid_proctbl.h
--- mod_fcgid.2.0.orig/fcgid_proctbl.h	2006-10-29 09:25:26.000000000 +0900
+++ mod_fcgid.2.0/fcgid_proctbl.h	2007-08-24 14:29:22.171639591 +0900
@@ -45,6 +45,7 @@
 
 typedef struct {
 	int must_exit;				/* All processes using this share memory must exit */
+	int is_graceful;
 } fcgid_global_share;
 
 typedef struct {

