httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From traw...@apache.org
Subject svn commit: r1087085 - in /httpd/httpd/trunk: docs/manual/developer/new_api_2_4.xml include/ap_mmn.h include/mpm_common.h server/mpm/event/event.c server/mpm/prefork/prefork.c server/mpm/worker/worker.c server/mpm_common.c server/mpm_unix.c
Date Wed, 30 Mar 2011 21:32:11 GMT
Author: trawick
Date: Wed Mar 30 21:32:10 2011
New Revision: 1087085

URL: http://svn.apache.org/viewvc?rev=1087085&view=rev
Log:
Simplify the interface to ap_reclaim_child_processes() and
ap_relieve_child_processes(): instead of requiring the MPM
to implement an otherwise-useless hook, just use a callback
function.

As I don't expect third-party MPM devs are following our day
to day progress, the API changes are considered part of
yesterday's MMN change.

Modified:
    httpd/httpd/trunk/docs/manual/developer/new_api_2_4.xml
    httpd/httpd/trunk/include/ap_mmn.h
    httpd/httpd/trunk/include/mpm_common.h
    httpd/httpd/trunk/server/mpm/event/event.c
    httpd/httpd/trunk/server/mpm/prefork/prefork.c
    httpd/httpd/trunk/server/mpm/worker/worker.c
    httpd/httpd/trunk/server/mpm_common.c
    httpd/httpd/trunk/server/mpm_unix.c

Modified: httpd/httpd/trunk/docs/manual/developer/new_api_2_4.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/developer/new_api_2_4.xml?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/developer/new_api_2_4.xml (original)
+++ httpd/httpd/trunk/docs/manual/developer/new_api_2_4.xml Wed Mar 30 21:32:10 2011
@@ -222,7 +222,9 @@
       <li>REMOVES: accept, lockfile, lock_mech, set_scoreboard (locking uses the new
ap_mutex API)</li>
       <li>NEW API to drop privileges (delegates this platform-dependent
           function to modules)</li>
-      <li>NEW Hooks: mpm_query, mpm_note_child_killed, timed_callback, and get_name</li>
+      <li>NEW Hooks: mpm_query, timed_callback, and get_name</li>
+      <li>CHANGED interfaces: monitor hook,
+      ap_reclaim_child_processes, ap_relieve_child_processes</li>
     </ul>
   </section>
 

Modified: httpd/httpd/trunk/include/ap_mmn.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/ap_mmn.h?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/include/ap_mmn.h (original)
+++ httpd/httpd/trunk/include/ap_mmn.h Wed Mar 30 21:32:10 2011
@@ -313,6 +313,9 @@
  *                         proxy and cache interfaces.
  *                         Change ap_configfile_t/ap_cfg_getline()/
  *                         ap_cfg_getc() API, add ap_pcfg_strerror()
+ *                         Axe mpm_note_child_killed hook, change
+ *                         ap_reclaim_child_process and ap_recover_child_process
+ *                         interfaces.
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */

Modified: httpd/httpd/trunk/include/mpm_common.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/mpm_common.h?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/include/mpm_common.h (original)
+++ httpd/httpd/trunk/include/mpm_common.h Wed Mar 30 21:32:10 2011
@@ -81,34 +81,35 @@ extern "C" {
 #define AP_SIG_GRACEFUL_STOP_STRING "SIGWINCH"
 
 /**
+ * Callback function used for ap_reclaim_child_processes() and
+ * ap_relieve_child_processes().  The callback function will be
+ * called for each terminated child process.
+ */
+typedef void ap_reclaim_callback_fn_t(int childnum);
+
+/**
  * Make sure all child processes that have been spawned by the parent process
  * have died.  This includes process registered as "other_children".
  * @param terminate Either 1 or 0.  If 1, send the child processes SIGTERM
  *        each time through the loop.  If 0, give the process time to die
  *        on its own before signalling it.
- * @note This function requires that a hook is implemented by the MPM: <pre>
- *  mpm_note_child_killed -- Note the child died in the scoreboard
- * </pre>
  *
  * @note The MPM child processes which are reclaimed are those listed
  * in the scoreboard as well as those currently registered via
  * ap_register_extra_mpm_process().
  */
-void ap_reclaim_child_processes(int terminate);
+void ap_reclaim_child_processes(int terminate,
+                                ap_reclaim_callback_fn_t *mpm_callback);
 
 /**
  * Catch any child processes that have been spawned by the parent process
  * which have exited. This includes processes registered as "other_children".
  *
- * @note This function requires that a hook is implemented by the MPM: <pre>
- *  mpm_note_child_killed -- Note the child died in the scoreboard
- * </pre>
- *
  * @note The MPM child processes which are relieved are those listed
  * in the scoreboard as well as those currently registered via
  * ap_register_extra_mpm_process().
  */
-void ap_relieve_child_processes(void);
+void ap_relieve_child_processes(ap_reclaim_callback_fn_t *mpm_callback);
 
 /**
  * Tell ap_reclaim_child_processes() and ap_relieve_child_processes() about 
@@ -333,13 +334,6 @@ AP_DECLARE_HOOK(int, drop_privileges, (a
  */
 AP_DECLARE_HOOK(int, mpm_query, (int query_code, int *result, apr_status_t *rv))
 
-/* child specified by index has been killed; MPMs which use
- * ap_reclaim_child_processes() or ap_relieve_child_processes() must
- * implement this in order to update the scoreboard and handle any
- * MPM-specific actions
- */
-AP_DECLARE_HOOK(apr_status_t, mpm_note_child_killed, (int childnum))
-
 /* register the specified callback */
 AP_DECLARE_HOOK(apr_status_t, mpm_register_timed_callback,
                 (apr_time_t t, ap_mpm_callback_fn_t *cbfn, void *baton))

Modified: httpd/httpd/trunk/server/mpm/event/event.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/event/event.c?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/event/event.c (original)
+++ httpd/httpd/trunk/server/mpm/event/event.c Wed Mar 30 21:32:10 2011
@@ -424,10 +424,9 @@ static int event_query(int query_code, i
     return OK;
 }
 
-static apr_status_t event_note_child_killed(int childnum)
+static void event_note_child_killed(int childnum)
 {
     ap_scoreboard_image->parent[childnum].pid = 0;
-    return APR_SUCCESS;
 }
 
 static const char *event_get_name(void)
@@ -2256,7 +2255,8 @@ static int event_run(apr_pool_t * _pconf
          * Kill child processes, tell them to call child_exit, etc...
          */
         ap_event_pod_killpg(pod, ap_daemons_limit, FALSE);
-        ap_reclaim_child_processes(1);  /* Start with SIGTERM */
+        ap_reclaim_child_processes(1, /* Start with SIGTERM */
+                                   event_note_child_killed);
 
         if (!child_fatal) {
             /* cleanup pid file on normal shutdown */
@@ -2276,7 +2276,7 @@ static int event_run(apr_pool_t * _pconf
         /* Close our listeners, and then ask our children to do same */
         ap_close_listeners();
         ap_event_pod_killpg(pod, ap_daemons_limit, TRUE);
-        ap_relieve_child_processes();
+        ap_relieve_child_processes(event_note_child_killed);
 
         if (!child_fatal) {
             /* cleanup pid file on normal shutdown */
@@ -2298,7 +2298,7 @@ static int event_run(apr_pool_t * _pconf
             apr_sleep(apr_time_from_sec(1));
 
             /* Relieve any children which have now exited */
-            ap_relieve_child_processes();
+            ap_relieve_child_processes(event_note_child_killed);
 
             active_children = 0;
             for (index = 0; index < ap_daemons_limit; ++index) {
@@ -2316,7 +2316,7 @@ static int event_run(apr_pool_t * _pconf
          * really dead.
          */
         ap_event_pod_killpg(pod, ap_daemons_limit, FALSE);
-        ap_reclaim_child_processes(1);
+        ap_reclaim_child_processes(1, event_note_child_killed);
 
         return DONE;
     }
@@ -2356,7 +2356,8 @@ static int event_run(apr_pool_t * _pconf
          */
         ap_event_pod_killpg(pod, ap_daemons_limit, FALSE);
 
-        ap_reclaim_child_processes(1);  /* Start with SIGTERM */
+        ap_reclaim_child_processes(1,  /* Start with SIGTERM */
+                                   event_note_child_killed);
         ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
                      "SIGHUP received.  Attempting to restart");
     }
@@ -2720,7 +2721,6 @@ static void event_hooks(apr_pool_t * p)
     ap_hook_check_config(event_check_config, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm(event_run, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm_query(event_query, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_mpm_note_child_killed(event_note_child_killed, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm_register_timed_callback(event_register_timed_callback, NULL, NULL,
                                         APR_HOOK_MIDDLE);
     ap_hook_mpm_get_name(event_get_name, NULL, NULL, APR_HOOK_MIDDLE);

Modified: httpd/httpd/trunk/server/mpm/prefork/prefork.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/prefork/prefork.c?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/prefork/prefork.c (original)
+++ httpd/httpd/trunk/server/mpm/prefork/prefork.c Wed Mar 30 21:32:10 2011
@@ -306,10 +306,9 @@ static int prefork_query(int query_code,
     return OK;
 }
 
-static apr_status_t prefork_note_child_killed(int childnum)
+static void prefork_note_child_killed(int childnum)
 {
     ap_scoreboard_image->parent[childnum].pid = 0;
-    return APR_SUCCESS;
 }
 
 static const char *prefork_get_name(void)
@@ -1059,7 +1058,8 @@ static int prefork_run(apr_pool_t *_pcon
         if (ap_unixd_killpg(getpgrp(), SIGTERM) < 0) {
             ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "killpg SIGTERM");
         }
-        ap_reclaim_child_processes(1);          /* Start with SIGTERM */
+        ap_reclaim_child_processes(1, /* Start with SIGTERM */
+                                   prefork_note_child_killed);
 
         /* cleanup pid file on normal shutdown */
         ap_remove_pid(pconf, ap_pid_fname);
@@ -1093,7 +1093,7 @@ static int prefork_run(apr_pool_t *_pcon
         }
 
         /* Allow each child which actually finished to exit */
-        ap_relieve_child_processes();
+        ap_relieve_child_processes(prefork_note_child_killed);
 
         /* cleanup pid file */
         ap_remove_pid(pconf, ap_pid_fname);
@@ -1112,7 +1112,7 @@ static int prefork_run(apr_pool_t *_pcon
             sleep(1);
 
             /* Relieve any children which have now exited */
-            ap_relieve_child_processes();
+            ap_relieve_child_processes(prefork_note_child_killed);
 
             active_children = 0;
             for (index = 0; index < ap_daemons_limit; ++index) {
@@ -1180,7 +1180,8 @@ static int prefork_run(apr_pool_t *_pcon
         if (ap_unixd_killpg(getpgrp(), SIGHUP) < 0) {
             ap_log_error(APLOG_MARK, APLOG_WARNING, errno, ap_server_conf, "killpg SIGHUP");
         }
-        ap_reclaim_child_processes(0);          /* Not when just starting up */
+        ap_reclaim_child_processes(0, /* Not when just starting up */
+                                   prefork_note_child_killed);
         ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
                     "SIGHUP received.  Attempting to restart");
     }
@@ -1415,7 +1416,6 @@ static void prefork_hooks(apr_pool_t *p)
     ap_hook_check_config(prefork_check_config, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm(prefork_run, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm_query(prefork_query, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_mpm_note_child_killed(prefork_note_child_killed, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm_get_name(prefork_get_name, NULL, NULL, APR_HOOK_MIDDLE);
 }
 

Modified: httpd/httpd/trunk/server/mpm/worker/worker.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/worker/worker.c?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/worker/worker.c (original)
+++ httpd/httpd/trunk/server/mpm/worker/worker.c Wed Mar 30 21:32:10 2011
@@ -372,10 +372,9 @@ static int worker_query(int query_code, 
     return OK;
 }
 
-static apr_status_t worker_note_child_killed(int childnum)
+static void worker_note_child_killed(int childnum)
 {
     ap_scoreboard_image->parent[childnum].pid = 0;
-    return APR_SUCCESS;
 }
 
 static const char *worker_get_name(void)
@@ -1774,7 +1773,8 @@ static int worker_run(apr_pool_t *_pconf
          * Kill child processes, tell them to call child_exit, etc...
          */
         ap_worker_pod_killpg(pod, ap_daemons_limit, FALSE);
-        ap_reclaim_child_processes(1);                /* Start with SIGTERM */
+        ap_reclaim_child_processes(1, /* Start with SIGTERM */
+                                   worker_note_child_killed);
 
         if (!child_fatal) {
             /* cleanup pid file on normal shutdown */
@@ -1794,7 +1794,7 @@ static int worker_run(apr_pool_t *_pconf
         /* Close our listeners, and then ask our children to do same */
         ap_close_listeners();
         ap_worker_pod_killpg(pod, ap_daemons_limit, TRUE);
-        ap_relieve_child_processes();
+        ap_relieve_child_processes(worker_note_child_killed);
 
         if (!child_fatal) {
             /* cleanup pid file on normal shutdown */
@@ -1816,7 +1816,7 @@ static int worker_run(apr_pool_t *_pconf
             apr_sleep(apr_time_from_sec(1));
 
             /* Relieve any children which have now exited */
-            ap_relieve_child_processes();
+            ap_relieve_child_processes(worker_note_child_killed);
 
             active_children = 0;
             for (index = 0; index < ap_daemons_limit; ++index) {
@@ -1834,7 +1834,7 @@ static int worker_run(apr_pool_t *_pconf
          * really dead.
          */
         ap_worker_pod_killpg(pod, ap_daemons_limit, FALSE);
-        ap_reclaim_child_processes(1);
+        ap_reclaim_child_processes(1, worker_note_child_killed);
 
         return DONE;
     }
@@ -1873,7 +1873,8 @@ static int worker_run(apr_pool_t *_pconf
          */
         ap_worker_pod_killpg(pod, ap_daemons_limit, FALSE);
 
-        ap_reclaim_child_processes(1);                /* Start with SIGTERM */
+        ap_reclaim_child_processes(1, /* Start with SIGTERM */
+                                   worker_note_child_killed);
         ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf,
                     "SIGHUP received.  Attempting to restart");
     }
@@ -2227,7 +2228,6 @@ static void worker_hooks(apr_pool_t *p)
     ap_hook_check_config(worker_check_config, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm(worker_run, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm_query(worker_query, NULL, NULL, APR_HOOK_MIDDLE);
-    ap_hook_mpm_note_child_killed(worker_note_child_killed, NULL, NULL, APR_HOOK_MIDDLE);
     ap_hook_mpm_get_name(worker_get_name, NULL, NULL, APR_HOOK_MIDDLE);
 }
 

Modified: httpd/httpd/trunk/server/mpm_common.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm_common.c?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm_common.c (original)
+++ httpd/httpd/trunk/server/mpm_common.c Wed Mar 30 21:32:10 2011
@@ -65,7 +65,6 @@ APR_HOOK_STRUCT(
     APR_HOOK_LINK(drop_privileges)
     APR_HOOK_LINK(mpm)
     APR_HOOK_LINK(mpm_query)
-    APR_HOOK_LINK(mpm_note_child_killed)
     APR_HOOK_LINK(mpm_register_timed_callback)
     APR_HOOK_LINK(mpm_get_name)
 )
@@ -77,7 +76,6 @@ APR_HOOK_STRUCT(
     APR_HOOK_LINK(drop_privileges)
     APR_HOOK_LINK(mpm)
     APR_HOOK_LINK(mpm_query)
-    APR_HOOK_LINK(mpm_note_child_killed)
     APR_HOOK_LINK(mpm_register_timed_callback)
     APR_HOOK_LINK(mpm_get_name)
 )
@@ -93,9 +91,6 @@ AP_IMPLEMENT_HOOK_RUN_FIRST(int, mpm,
 AP_IMPLEMENT_HOOK_RUN_FIRST(int, mpm_query,
                             (int query_code, int *result, apr_status_t *_rv),
                             (query_code, result, _rv), DECLINED)
-AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, mpm_note_child_killed,
-                            (int childnum),
-                            (childnum), APR_ENOTIMPL)
 AP_IMPLEMENT_HOOK_RUN_FIRST(apr_status_t, mpm_register_timed_callback,
                             (apr_time_t t, ap_mpm_callback_fn_t *cbfn, void *baton),
                             (t, cbfn, baton), APR_ENOTIMPL)

Modified: httpd/httpd/trunk/server/mpm_unix.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm_unix.c?rev=1087085&r1=1087084&r2=1087085&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm_unix.c (original)
+++ httpd/httpd/trunk/server/mpm_unix.c Wed Mar 30 21:32:10 2011
@@ -165,7 +165,8 @@ static int reclaim_one_pid(pid_t pid, ac
     return 0;
 }
 
-void ap_reclaim_child_processes(int terminate)
+void ap_reclaim_child_processes(int terminate,
+                                ap_reclaim_callback_fn_t *mpm_callback)
 {
     apr_time_t waittime = 1024 * 16;
     int i;
@@ -228,7 +229,7 @@ void ap_reclaim_child_processes(int term
             }
 
             if (reclaim_one_pid(pid, action_table[cur_action].action)) {
-                ap_run_mpm_note_child_killed(i);
+                mpm_callback(i);
             }
             else {
                 ++not_dead_yet;
@@ -255,7 +256,7 @@ void ap_reclaim_child_processes(int term
              action_table[cur_action].action != GIVEUP);
 }
 
-void ap_relieve_child_processes(void)
+void ap_relieve_child_processes(ap_reclaim_callback_fn_t *mpm_callback)
 {
     int i;
     extra_process_t *cur_extra;
@@ -273,7 +274,7 @@ void ap_relieve_child_processes(void)
         }
 
         if (reclaim_one_pid(pid, DO_NOTHING)) {
-            ap_run_mpm_note_child_killed(i);
+            mpm_callback(i);
         }
     }
 



Mime
View raw message