]> git.pld-linux.org Git - packages/apache.git/commitdiff
- rel 2; bugfixes for upstream 49058 and 39311 (prefork only) auto/th/apache-2.2.24-2
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Tue, 9 Apr 2013 16:08:32 +0000 (18:08 +0200)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Tue, 9 Apr 2013 16:08:32 +0000 (18:08 +0200)
apache-bug-39311-preforkonly.patch [new file with mode: 0644]
apache.spec

diff --git a/apache-bug-39311-preforkonly.patch b/apache-bug-39311-preforkonly.patch
new file mode 100644 (file)
index 0000000..772f4f8
--- /dev/null
@@ -0,0 +1,37 @@
+--- httpd-2.2.24/server/mpm/prefork/prefork.c~ 2012-07-27 21:51:57.000000000 +0200
++++ httpd-2.2.24/server/mpm/prefork/prefork.c  2013-04-09 17:58:05.772765411 +0200
+@@ -1043,14 +1043,31 @@
+          * extra child
+          */
+         if (pid.pid != -1) {
++            process_score *child_record;
+             processed_status = ap_process_child_status(&pid, exitwhy, status);
++            child_slot = find_child_by_pid(&pid);
+             if (processed_status == APEXIT_CHILDFATAL) {
+-                mpm_state = AP_MPMQ_STOPPING;
+-                return 1;
++                /* fix race condition found in PR 39311
++                * A child created at the same time as a graceful happens 
++                * can find the lock missing and create a fatal error.
++                * It is not fatal for the last generation to be in this state.
++                */
++               child_record = ap_get_scoreboard_process(child_slot);
++               if (child_slot < 0
++                   || child_record->generation
++                      == ap_my_generation) {
++                   mpm_state = AP_MPMQ_STOPPING;
++                   return DONE;
++               }
++               else {
++                   ap_log_error(APLOG_MARK, APLOG_WARNING, 0, ap_server_conf,
++                                "Ignoring fatal error in child of previous "
++                                "generation (pid %ld).",
++                                (long)pid.pid);
++               } 
+             }
+             /* non-fatal death... note that it's gone in the scoreboard. */
+-            child_slot = find_child_by_pid(&pid);
+             if (child_slot >= 0) {
+                 (void) ap_update_child_status_from_indexes(child_slot, 0, SERVER_DEAD,
+                                                            (request_rec *) NULL);
index ad932b3910170a56c782e30a03562c089c7072b2..1ffb291cc728ab1f5560ac678285ab677f9530b4 100644 (file)
@@ -44,7 +44,7 @@ Summary(ru.UTF-8):    Самый популярный веб-сервер
 Summary(tr.UTF-8):     Lider WWW tarayıcı
 Name:          apache
 Version:       2.2.24
-Release:       1
+Release:       2
 License:       Apache v2.0
 Group:         Networking/Daemons/HTTP
 Source0:       http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz
@@ -92,6 +92,7 @@ Patch7:               %{name}-syslibs.patch
 Patch8:                httpd-2.0.45-encode.patch
 Patch9:                %{name}-paths.patch
 Patch10:       httpd-2.0.46-dav401dest.patch
+Patch11:       apache-bug-39311-preforkonly.patch
 Patch12:       httpd-2.0.46-sslmutex.patch
 Patch14:       httpd-2.0.48-corelimit.patch
 Patch15:       httpd-2.0.48-debuglog.patch
@@ -1788,6 +1789,7 @@ Dwa programy testowe/przykładowe cgi: test-cgi and print-env.
 %patch9 -p1
 %patch10 -p1
 %patch12 -p1
+%patch11 -p1
 %patch14 -p1
 %patch15 -p1
 %patch18 -p1
This page took 0.18719 seconds and 4 git commands to generate.