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);
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) {
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);
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;
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;
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;
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);
}
/*--------------------------------------------------------------------------*/
#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"
* 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.
* @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.
* @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.