martin 98/09/14 17:15:20
Modified: src CHANGES src/main http_log.c http_main.c Log: When the server shuts down cleanly, it also removes the httpd.pid PID file. This avoids the problem that apachectl cannot decide whether a "kill -0 pid" failed because of permissions (or system restrictions) or because the pid doesn't exist. Upon startup, an info msg is logged if an old PID file remains. PR: 2947 Submitted by: Charles Randall <[EMAIL PROTECTED]> Reviewed by: Martin Kraemer, Dean Gaudet Revision Changes Path 1.1058 +3 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1057 retrieving revision 1.1058 diff -u -r1.1057 -r1.1058 --- CHANGES 1998/09/12 11:26:00 1.1057 +++ CHANGES 1998/09/15 00:15:16 1.1058 @@ -1,5 +1,8 @@ Changes with Apache 1.3.2 + *) Delete PID file on clean shutdowns. + [Charles Randall <[EMAIL PROTECTED]>] PR#2947 + *) Fix mod_auth_*.html documents: NSCA -> NCSA [Youichirou Koga <[EMAIL PROTECTED]>] PR#2991 1.66 +22 -1 apache-1.3/src/main/http_log.c Index: http_log.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/main/http_log.c,v retrieving revision 1.65 retrieving revision 1.66 diff -u -r1.65 -r1.66 --- http_log.c 1998/09/10 06:58:19 1.65 +++ http_log.c 1998/09/15 00:15:18 1.66 @@ -446,16 +446,37 @@ void ap_log_pid (pool *p, char *fname) { FILE *pid_file; + struct stat finfo; + static pid_t saved_pid = -1; + pid_t mypid; if (!fname) return; + fname = ap_server_root_relative (p, fname); + mypid = getpid(); + if (mypid != saved_pid && stat(fname,&finfo) == 0) { + /* USR1 and HUP call this on each restart. + * Only warn on first time through for this pid. + * + * XXX: Could just write first time through too, although + * that may screw up scripts written to do something + * based on the last modification time of the pid file. + */ + ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, NULL, + ap_psprintf(p, + "pid file %s overwritten -- Unclean shutdown of previous apache run?", + fname) + ); + } + if(!(pid_file = fopen(fname,"w"))) { perror("fopen"); fprintf(stderr,"httpd: could not log pid to file %s\n", fname); exit(1); } - fprintf(pid_file,"%ld\n",(long)getpid()); + fprintf(pid_file,"%ld\n",(long)mypid); fclose(pid_file); + saved_pid = mypid; } API_EXPORT(void) ap_log_error_old (const char *err, server_rec *s) 1.390 +11 -1 apache-1.3/src/main/http_main.c Index: http_main.c =================================================================== RCS file: /export/home/cvs/apache-1.3/src/main/http_main.c,v retrieving revision 1.389 retrieving revision 1.390 diff -u -r1.389 -r1.390 --- http_main.c 1998/09/10 17:38:00 1.389 +++ http_main.c 1998/09/15 00:15:19 1.390 @@ -4288,9 +4288,19 @@ ap_log_error(APLOG_MARK, APLOG_WARNING, server_conf, "killpg SIGTERM"); } reclaim_child_processes(1); /* Start with SIGTERM */ + + /* cleanup pid file on normal shutdown */ + { + const char *pidfile = NULL; + pidfile = ap_server_root_relative (pconf, ap_pid_fname); + if ( pidfile != NULL && unlink(pidfile) == 0) + ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, server_conf, + "httpd: removed PID file %s (pid=%d)", + pidfile, getpid()); + } + ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, server_conf, "httpd: caught SIGTERM, shutting down"); - clean_parent_exit(0); }