]> granicus.if.org Git - apache/commitdiff
Rework the code to handle apache -k shutdown|restart. The fundamental problem
authorBill Stoddard <stoddard@apache.org>
Mon, 14 Feb 2000 22:01:08 +0000 (22:01 +0000)
committerBill Stoddard <stoddard@apache.org>
Mon, 14 Feb 2000 22:01:08 +0000 (22:01 +0000)
being solved here is determining the best way to discover the Apache
parent process PID (stored in the location specified by the PidFile directive).
This patch attempts to read the config file directly to determine the
pidfile and avoids going through the motions of calling all the module initialization
routines.

This patch will not work if the pidfile directive is in a file pointed to by
an include directive. Not sure is this is a common case or not on Windows.
If it is, it is easy enough to add a bit more code to follow include
directives. An interesting modification would be to detect the presence of a \
-C directive containing a pointer to the pidfile: E.g.,
apache -k restart -C "pidfile d:/mypidfile". Let's keep it simple for now and
see what happens.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84620 13f79535-47bb-0310-9956-ffa450edef68

server/main.c
server/mpm/winnt/mpm_winnt.c

index eae710a94a4df2e11467128f8111b4ab2e5319e3..1fb6e684ad3295b3d5ce174e475ab6fab4c8dafc 100644 (file)
@@ -298,10 +298,6 @@ API_EXPORT_NONSTD(int)        main(int argc, char *argv[])
     ap_context_t *ptemp; /* Pool for temporary config stuff, reset often */
     ap_context_t *pcommands; /* Pool for -C and -c switches */
 
-#ifdef WIN32
-    char *signal = NULL;
-#endif
-
     ap_server_argv0 = process->short_name;
     
     ap_util_uri_init();
@@ -334,11 +330,6 @@ API_EXPORT_NONSTD(int)        main(int argc, char *argv[])
        case 'f':
            confname = ap_optarg;
            break;
-#ifdef WIN32
-        case 'k':
-           signal = ap_optarg;
-            break;
-#endif
        case 'v':
            printf("Server version: %s\n", ap_get_server_version());
            printf("Server built:   %s\n", ap_get_server_built());
@@ -377,12 +368,6 @@ API_EXPORT_NONSTD(int)        main(int argc, char *argv[])
        ap_log_error(APLOG_MARK, APLOG_STARTUP | APLOG_NOERRNO, 0, NULL, "Syntax OK\n");
        destroy_and_exit_process(process, 0);
     }
-#ifdef WIN32
-    if (signal) {
-        ap_signal_parent(pconf, signal, ap_server_root);
-        destroy_and_exit_process(process, 0);
-    }
-#endif
     ap_clear_pool(plog);
     ap_run_open_logs(pconf, plog, ptemp, server_conf);
     ap_post_config_hook(pconf, plog, ptemp, server_conf);
index 603ea42963099d914138c34f7710d1ce1f44b917..ed2af726fcc791514f73bf59a8aaadf075fc52fa 100644 (file)
@@ -359,61 +359,6 @@ void ap_start_shutdown(void)
 {
     signal_parent(0);
 }
-
-void ap_signal_parent(ap_context_t *p, const char* signal, 
-                      const char* server_root) 
-{
-    HANDLE event;
-    char prefix[20];
-    char *EventName;
-    FILE *fp;
-    int nread;
-    char *fname;
-    int end;
-
-    printf("signal = %s\n", signal);
-
-    fname = ap_server_root_relative (p, ap_pid_fname);
-
-    fp = fopen(fname, "r");
-    if (!fp) {
-       printf("Cannot read apache PID file %s. Error = %d\n", fname, errno);
-        return;
-    }
-    prefix[0] = 'a';
-    prefix[1] = 'p';
-
-    nread = fread(prefix+2, 1, sizeof(prefix)-3, fp);
-    if (nread == 0) {
-       fclose(fp);
-       printf("PID file %s was empty\n", fname);
-        return;
-    }
-    fclose(fp);
-
-    /* Terminate the prefix string */
-    end = 2 + nread - 1;
-    while (end > 0 && (prefix[end] == '\r' || prefix[end] == '\n'))
-       end--;
-    prefix[end + 1] = '\0';
-
-    /* Build the event name. Should be one of the following...
-     * apPID_shutdown
-     * apPID_restart
-     */
-    EventName = ap_pstrcat(p,prefix,"_",signal,NULL);
-    printf("event name = %s\n", EventName);
-    event = OpenEvent(EVENT_ALL_ACCESS, FALSE, EventName);
-    printf("event handle = %d\n", event);
-    if (event == NULL) {
-       printf("Unable to open event %s.\n", EventName);
-        return;
-    }
-    SetEvent(event);
-    ResetEvent(event);
-    CloseHandle(event);
-    return;
-}
 /*
  * Initialise the signal names, in the global variables signal_name_prefix, 
  * signal_restart_name and signal_shutdown_name.