]> granicus.if.org Git - apache/commitdiff
change the callable functions in the mod_watchdog API
authorJeff Trawick <trawick@apache.org>
Wed, 30 Sep 2009 20:00:37 +0000 (20:00 +0000)
committerJeff Trawick <trawick@apache.org>
Wed, 30 Sep 2009 20:00:37 +0000 (20:00 +0000)
to optional hooks to avoid module ordering or other symbol
resolution issues; affected:

  ap_watchdog_get_instance
  ap_watchdog_register_callback
  ap_watchdog_set_callback_interval

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

modules/cluster/mod_heartmonitor.c
modules/core/mod_watchdog.c
modules/core/mod_watchdog.h

index 452c63c801326d972d0079a69505394d435e4053..9933ca77dea05dd89255a647175b2d0ac52659e7 100644 (file)
@@ -669,7 +669,16 @@ static int hm_post_config(apr_pool_t *p, apr_pool_t *plog,
     void *data;
     hm_ctx_t *ctx = ap_get_module_config(s->module_config,
                                          &heartmonitor_module);
-
+    APR_OPTIONAL_FN_TYPE(ap_watchdog_get_instance) *hm_watchdog_get_instance;
+    APR_OPTIONAL_FN_TYPE(ap_watchdog_register_callback) *hm_watchdog_register_callback;
+
+    hm_watchdog_get_instance = APR_RETRIEVE_OPTIONAL_FN(ap_watchdog_get_instance);
+    hm_watchdog_register_callback = APR_RETRIEVE_OPTIONAL_FN(ap_watchdog_register_callback);
+    if (!hm_watchdog_get_instance || !hm_watchdog_register_callback) {
+        ap_log_error(APLOG_MARK, APLOG_CRIT, 0, s,
+                     "Heartmonitor: mod_watchdog is required");
+        return !OK;
+    }
 
     /* Create the slotmem */
     apr_pool_userdata_get(&data, userdata_key, s->process->pool);
@@ -694,7 +703,7 @@ static int hm_post_config(apr_pool_t *p, apr_pool_t *plog,
     if (!ctx->active) {
         return OK;
     }
-    rv = ap_watchdog_get_instance(&ctx->watchdog,
+    rv = hm_watchdog_get_instance(&ctx->watchdog,
                                   HM_WATHCHDOG_NAME,
                                   0, 1, p);
     if (rv) {
@@ -704,7 +713,7 @@ static int hm_post_config(apr_pool_t *p, apr_pool_t *plog,
         return !OK;
     }
     /* Register a callback with zero interval. */
-    rv = ap_watchdog_register_callback(ctx->watchdog,
+    rv = hm_watchdog_register_callback(ctx->watchdog,
                                        0,
                                        ctx,
                                        hm_watchdog_callback);
index 838171b098371d97033f84d2959bb1df3b4f0005..a7f9b621e98fc35c7f97fdb5b5523ce3acf8192e 100644 (file)
@@ -300,11 +300,11 @@ static apr_status_t wd_startup(ap_watchdog_t *w, apr_pool_t *p)
     return rc;
 }
 
-AP_WD_DECLARE(apr_status_t) ap_watchdog_get_instance(ap_watchdog_t **watchdog,
-                                                     const char *name,
-                                                     int parent,
-                                                     int singleton,
-                                                     apr_pool_t *p)
+static apr_status_t ap_watchdog_get_instance(ap_watchdog_t **watchdog,
+                                             const char *name,
+                                             int parent,
+                                             int singleton,
+                                             apr_pool_t *p)
 {
     ap_watchdog_t *w;
     const char *pver = parent ? AP_WATCHODG_PVERSION : AP_WATCHODG_CVERSION;
@@ -330,10 +330,10 @@ AP_WD_DECLARE(apr_status_t) ap_watchdog_get_instance(ap_watchdog_t **watchdog,
                                 pver, *watchdog);
 }
 
-AP_WD_DECLARE(apr_status_t) ap_watchdog_set_callback_interval(ap_watchdog_t *w,
-                                apr_interval_time_t interval,
-                                const void *data,
-                                ap_watchdog_callback_fn_t *callback)
+static apr_status_t ap_watchdog_set_callback_interval(ap_watchdog_t *w,
+                                                      apr_interval_time_t interval,
+                                                      const void *data,
+                                                      ap_watchdog_callback_fn_t *callback)
 {
     watchdog_list_t *c = w->callbacks;
     apr_status_t rv = APR_EOF;
@@ -355,10 +355,10 @@ AP_WD_DECLARE(apr_status_t) ap_watchdog_set_callback_interval(ap_watchdog_t *w,
     return rv;
 }
 
-AP_WD_DECLARE(apr_status_t) ap_watchdog_register_callback(ap_watchdog_t *w,
-                                apr_interval_time_t interval,
-                                const void *data,
-                                ap_watchdog_callback_fn_t *callback)
+static apr_status_t ap_watchdog_register_callback(ap_watchdog_t *w,
+                                                  apr_interval_time_t interval,
+                                                  const void *data,
+                                                  ap_watchdog_callback_fn_t *callback)
 {
     watchdog_list_t *c = w->callbacks;
 
@@ -718,6 +718,9 @@ static void wd_register_hooks(apr_pool_t *p)
                        NULL,
                        APR_HOOK_MIDDLE);
 
+    APR_REGISTER_OPTIONAL_FN(ap_watchdog_get_instance);
+    APR_REGISTER_OPTIONAL_FN(ap_watchdog_register_callback);
+    APR_REGISTER_OPTIONAL_FN(ap_watchdog_set_callback_interval);
 }
 
 /*--------------------------------------------------------------------------*/
index a86de298313133932778ed48bb55629fd2efd25a..540048161e78571007fef3510a1dcf6c94375fcb 100644 (file)
@@ -37,6 +37,7 @@
 #include "apr_shm.h"
 #include "apr_hash.h"
 #include "apr_hooks.h"
+#include "apr_optional.h"
 #include "apr_file_io.h"
 #include "apr_time.h"
 #include "apr_thread_proc.h"
@@ -131,11 +132,9 @@ typedef apr_status_t ap_watchdog_callback_fn_t(int state, void *data,
  *         and function will create a new watchdog instance.
  *         Note that default client process watchdog works in singleton mode.
  */
-AP_WD_DECLARE(apr_status_t) ap_watchdog_get_instance(ap_watchdog_t **watchdog,
-                                                  const char *name,
-                                                  int parent,
-                                                  int singleton,
-                                                  apr_pool_t *p);
+APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_watchdog_get_instance,
+                        (ap_watchdog_t **watchdog, const char *name, int parent,
+                         int singleton, apr_pool_t *p));
 
 /**
  * Register watchdog callback.
@@ -145,10 +144,9 @@ AP_WD_DECLARE(apr_status_t) ap_watchdog_get_instance(ap_watchdog_t **watchdog,
  * @param data The data to pass to the callback function.
  * @return APR_SUCCESS if all went well. APR_EEXIST if already registered.
  */
-AP_WD_DECLARE(apr_status_t) ap_watchdog_register_callback(ap_watchdog_t *watchdog,
-                            apr_interval_time_t interval,
-                            const void *data,
-                            ap_watchdog_callback_fn_t *callback);
+APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_watchdog_register_callback,
+                        (ap_watchdog_t *watchdog, apr_interval_time_t interval,
+                         const void *data, ap_watchdog_callback_fn_t *callback));
 
 /**
  * Update registered watchdog callback interval.
@@ -158,10 +156,9 @@ AP_WD_DECLARE(apr_status_t) ap_watchdog_register_callback(ap_watchdog_t *watchdo
  * @param data The data to pass to the callback function.
  * @return APR_SUCCESS if all went well. APR_EOF if callback was not found.
  */
-AP_WD_DECLARE(apr_status_t) ap_watchdog_set_callback_interval(ap_watchdog_t *w,
-                            apr_interval_time_t interval,
-                            const void *data,
-                            ap_watchdog_callback_fn_t *callback);
+APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_watchdog_set_callback_interval,
+                        (ap_watchdog_t *w, apr_interval_time_t interval,
+                         const void *data, ap_watchdog_callback_fn_t *callback));
 
 /**
  * Watchdog require hook.