bjh 99/11/01 03:25:05
Modified: src/modules/mpm/spmt_os2 spmt_os2.c Log: OS/2: When shutting down, kill off child threads properly before shutting down parent thread. Revision Changes Path 1.21 +32 -13 apache-2.0/src/modules/mpm/spmt_os2/spmt_os2.c Index: spmt_os2.c =================================================================== RCS file: /home/cvs/apache-2.0/src/modules/mpm/spmt_os2/spmt_os2.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- spmt_os2.c 1999/11/01 10:58:55 1.20 +++ spmt_os2.c 1999/11/01 11:25:04 1.21 @@ -1524,20 +1524,39 @@ } if (shutdown_pending) { - /* Time to gracefully shut down: - * Don't worry about killing child threads for now, the all die when the parent exits - */ + /* Time to gracefully shut down */ + const char *pidfile = NULL; + int slot; + TID tid; + ULONG rc; - /* 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, 0, - server_conf, - "removed PID file %s (pid=%ld)", - pidfile, (long)getpid()); - } + /* Kill off running threads */ + for (slot=0; slot<max_daemons_limit; slot++) { + if (ap_scoreboard_image->servers[slot].status != SERVER_DEAD) { + tid = ap_scoreboard_image->parent[slot].tid; + rc = DosKillThread(tid); + + if (rc == 0) { + rc = DosWaitThread(&tid, DCWW_WAIT); + + if (rc) { + ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, server_conf, + "error %lu waiting for thread to terminate", rc); + } + } else { + ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, 0, server_conf, + "error %lu killing thread", rc); + } + } + } + + /* cleanup pid file on normal shutdown */ + pidfile = ap_server_root_relative (pconf, ap_pid_fname); + if ( pidfile != NULL && unlink(pidfile) == 0) + ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_INFO, 0, + server_conf, + "removed PID file %s (pid=%ld)", + pidfile, (long)getpid()); ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_NOTICE, 0, server_conf, "caught SIGTERM, shutting down");