|
@@ -1,77 +0,0 @@
|
|
|
-From 5b95d256387b45fbe33f7ee7890ae35afdd5c371 Mon Sep 17 00:00:00 2001
|
|
|
-From: Joe Orton <jorton@apache.org>
|
|
|
-Date: Fri, 13 Mar 2020 14:34:18 +0000
|
|
|
-Subject: [PATCH] * server/log.c (ap_log_pid): Use a temporary file, then
|
|
|
- rename once successfully written; also add error checking. Avoids startup
|
|
|
- failures if a previous httpd invocation crashed while writing the pidfile.
|
|
|
-
|
|
|
-Submitted by: Nicolas Carrier <carrier.nicolas0 gmail.com>, jorton
|
|
|
-Github: closes #100, closes #69
|
|
|
-PR: 63140
|
|
|
-
|
|
|
-git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1875153 13f79535-47bb-0310-9956-ffa450edef68
|
|
|
-Signed-off-by: Nicolas Carrier <nicolas.carrier@orolia.com>
|
|
|
----
|
|
|
- server/log.c | 33 ++++++++++++++++++++++++++-------
|
|
|
- 1 file changed, 26 insertions(+), 7 deletions(-)
|
|
|
-
|
|
|
-diff --git a/server/log.c b/server/log.c
|
|
|
-index f0bde6e4b8..8d54b4e057 100644
|
|
|
---- a/server/log.c
|
|
|
-+++ b/server/log.c
|
|
|
-@@ -1598,6 +1598,9 @@ AP_DECLARE(void) ap_log_pid(apr_pool_t *p, const char *filename)
|
|
|
- pid_t mypid;
|
|
|
- apr_status_t rv;
|
|
|
- const char *fname;
|
|
|
-+ char *temp_fname;
|
|
|
-+ apr_fileperms_t perms;
|
|
|
-+ char pidstr[64];
|
|
|
-
|
|
|
- if (!filename) {
|
|
|
- return;
|
|
|
-@@ -1626,19 +1629,35 @@ AP_DECLARE(void) ap_log_pid(apr_pool_t *p, const char *filename)
|
|
|
- fname);
|
|
|
- }
|
|
|
-
|
|
|
-- if ((rv = apr_file_open(&pid_file, fname,
|
|
|
-- APR_WRITE | APR_CREATE | APR_TRUNCATE,
|
|
|
-- APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD, p))
|
|
|
-- != APR_SUCCESS) {
|
|
|
-+ temp_fname = apr_pstrcat(p, fname, ".XXXXXX", NULL);
|
|
|
-+ rv = apr_file_mktemp(&pid_file, temp_fname,
|
|
|
-+ APR_FOPEN_WRITE | APR_FOPEN_CREATE | APR_FOPEN_TRUNCATE, p);
|
|
|
-+ if (rv != APR_SUCCESS) {
|
|
|
- ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL, APLOGNO(00099)
|
|
|
-- "could not create %s", fname);
|
|
|
-+ "could not create %s", temp_fname);
|
|
|
- ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL, APLOGNO(00100)
|
|
|
- "%s: could not log pid to file %s",
|
|
|
- ap_server_argv0, fname);
|
|
|
- exit(1);
|
|
|
- }
|
|
|
-- apr_file_printf(pid_file, "%" APR_PID_T_FMT APR_EOL_STR, mypid);
|
|
|
-- apr_file_close(pid_file);
|
|
|
-+
|
|
|
-+ apr_snprintf(pidstr, sizeof pidstr, "%" APR_PID_T_FMT APR_EOL_STR, mypid);
|
|
|
-+
|
|
|
-+ perms = APR_UREAD | APR_UWRITE | APR_GREAD | APR_WREAD;
|
|
|
-+ rv = apr_file_perms_set(temp_fname, perms);
|
|
|
-+ if (rv == APR_SUCCESS)
|
|
|
-+ rv = apr_file_write_full(pid_file, pidstr, strlen(pidstr), NULL);
|
|
|
-+ if (rv == APR_SUCCESS)
|
|
|
-+ rv = apr_file_close(pid_file);
|
|
|
-+ if (rv == APR_SUCCESS)
|
|
|
-+ rv = apr_file_rename(temp_fname, fname, p);
|
|
|
-+ if (rv != APR_SUCCESS) {
|
|
|
-+ ap_log_error(APLOG_MARK, APLOG_ERR, rv, NULL, APLOGNO(10231)
|
|
|
-+ "%s: Failed creating pid file %s",
|
|
|
-+ ap_server_argv0, temp_fname);
|
|
|
-+ exit(1);
|
|
|
-+ }
|
|
|
-+
|
|
|
- saved_pid = mypid;
|
|
|
- }
|
|
|
-
|
|
|
---
|
|
|
-2.25.2
|
|
|
-
|