mod_watchdog.h revision 9b3f22245585921d653a10083d862538dc704f56
8a77240a809197c92c0736c431b4b88947a7bac1Christian Maeder/* Licensed to the Apache Software Foundation (ASF) under one or more
d9a45a35cd696085be1a038b2cc67bee6819c574cmaeder * contributor license agreements. See the NOTICE file distributed with
8a77240a809197c92c0736c431b4b88947a7bac1Christian Maeder * this work for additional information regarding copyright ownership.
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder * The ASF licenses this file to You under the Apache License, Version 2.0
e9458b1a7a19a63aa4c179f9ab20f4d50681c168Jens Elkner * (the "License"); you may not use this file except in compliance with
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * the License. You may obtain a copy of the License at
98890889ffb2e8f6f722b00e265a211f13b5a861Corneliu-Claudiu Prodescu * http://www.apache.org/licenses/LICENSE-2.0
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * Unless required by applicable law or agreed to in writing, software
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * distributed under the License is distributed on an "AS IS" BASIS,
f3a94a197960e548ecd6520bb768cb0d547457bbChristian Maeder * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * See the License for the specific language governing permissions and
0095c7efbddd0ffeed6aaf8ec015346be161d819Till Mossakowski * limitations under the License.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @brief Watchdog module for Apache
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @defgroup MOD_WATCHDOG watchdog
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @ingroup APACHE_MODS
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * Default singleton watchdog instance name.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * Singleton watchdog is protected by mutex and
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * guaranteed to be run inside a single child process
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * Default watchdog instance name
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * Default Watchdog interval
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder#define AP_WD_TM_INTERVAL APR_TIME_C(1000000) /* 1 second */
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * Watchdog thread timer resolution
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define AP_WD_TM_SLICE APR_TIME_C(100000) /* 100 ms */
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder/* State values for callback */
adea2e45fa61f1097aadc490a0aeaf4831b729ccChristian Maeder/* Create a set of AP_WD_DECLARE(type), AP_WD_DECLARE_NONSTD(type) and
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder * AP_WD_DECLARE_DATA with appropriate export and import tags for the platform
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define AP_WD_DECLARE(type) __declspec(dllexport) type __stdcall
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define AP_WD_DECLARE_NONSTD(type) __declspec(dllexport) type
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define AP_WD_DECLARE_DATA __declspec(dllexport)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define AP_WD_DECLARE(type) __declspec(dllimport) type __stdcall
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski#define AP_WD_DECLARE_NONSTD(type) __declspec(dllimport) type
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#define AP_WD_DECLARE_DATA __declspec(dllimport)
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * Callback function used for watchdog.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @param state Watchdog state function. See AP_WATCHODG_STATE_ .
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @param data is what was passed to @ap_watchdog_register_callback function.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @param pool Temporary callback pool destroyed after the call.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @return APR_SUCCESS to continue calling this callback.
a98fd29a06e80e447af26d898044c23497adbc73Mihai Codescutypedef apr_status_t ap_watchdog_callback_fn_t(int state, void *data,
e7d2b3903c7b44db432538b0d720c21062c24823Christian Maeder * Get watchdog instance.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param watchdog Storage for watchdog instance.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @param name Watchdog name.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @param parent Non zero to get the parent process watchdog instance.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @param singleton Non zero to get the singleton watchdog instance.
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder * @param pool The pool use.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @return APR_SUCCESS if all went well
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * @remark Use @AP_WATCHDOG_DEFAULT to get default watchdog instance.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * If separate watchdog thread is needed provide unique name
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * and function will create a new watchdog instance.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * Note that default client process watchdog works in singleton mode.
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till MossakowskiAP_WD_DECLARE(apr_status_t) ap_watchdog_get_instance(ap_watchdog_t **watchdog,
df11e5eab86d8247f58e301d8f0a2c6ecf4c9541Till Mossakowski * Register watchdog callback.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param watchdog Watchdog to use
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @param interval Interval on which the callback function will execute.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param callback The function to call on watchdog event.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param data The data to pass to the callback function.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @return APR_SUCCESS if all went well. APR_EEXIST if already registered.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederAP_WD_DECLARE(apr_status_t) ap_watchdog_register_callback(ap_watchdog_t *watchdog,
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder ap_watchdog_callback_fn_t *callback);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * Update registered watchdog callback interval.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @param watchdog Watchdog to use
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @param interval New interval on which the callback function will execute.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @param callback The function to call on watchdog event.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @param data The data to pass to the callback function.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @return APR_SUCCESS if all went well. APR_EOF if callback was not found.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von SchroederAP_WD_DECLARE(apr_status_t) ap_watchdog_set_callback_interval(ap_watchdog_t *w,
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder ap_watchdog_callback_fn_t *callback);
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * Watchdog require hook.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @param name Watchdog name.
3d3889e0cefcdce9b3f43c53aaa201943ac2e895Jonathan von Schroeder * @param parent Non zero to indicate the parent process watchdog mode.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param singleton Non zero to indicate the singleton watchdog mode.
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder * @param pool The pool used to create the watchdog.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @return OK to enable notifications from this watchdog, DECLINED otherwise.
c911a0ec80ca4a178399c68f1e28be4e2bf42fceChristian Maeder * @remark This is called in post config phase for all watchdog instances
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * that have no callbacks registered. Modules using this hook
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder * should ensure their post_config hook is called after watchdog
556f473448dfcceee22afaa89ed7a364489cdbbbChristian Maeder * post_config.
09b431a868c79a92ae7c9bd141565f43f9034144Christian MaederAPR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_need, (server_rec *s,
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * Watchdog initialize hook.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * It is called after the watchog thread is initialized.
c8117ae0b6088d835211e494aef229558c814bd3cmaeder * @param name Watchdog name.
a65c6747c9acbbebc93baba7bae94d2e3d8cdafbTill Mossakowski * @param pool The pool used to create the watchdog.
09b431a868c79a92ae7c9bd141565f43f9034144Christian MaederAPR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_init, (
d9a45a35cd696085be1a038b2cc67bee6819c574cmaeder const char *name,
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * Watchdog terminate hook.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * It is called when the watchog thread is terminated.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param name Watchdog name.
3f5a42972cccb9c4fd0821def1292ec40b7a4871cmaeder * @param pool The pool used to create the watchdog.
cd6e5706893519bfcf24539afa252fcbed5097ddKlaus LuettichAPR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_exit, (
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * Fixed interval watchdog hook.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * It is called regulary on @AP_WD_TM_INTERVAL interval.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param name Watchdog name.
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder * @param pool Temporary pool destroyed after the call.
e7d2b3903c7b44db432538b0d720c21062c24823Christian MaederAPR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_step, (
09b431a868c79a92ae7c9bd141565f43f9034144Christian Maeder#endif /* MOD_WATCHDOG_H */