github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_4_58/include/mod_watchdog.h (about)

     1  /* Licensed to the Apache Software Foundation (ASF) under one or more
     2   * contributor license agreements.  See the NOTICE file distributed with
     3   * this work for additional information regarding copyright ownership.
     4   * The ASF licenses this file to You under the Apache License, Version 2.0
     5   * (the "License"); you may not use this file except in compliance with
     6   * the License.  You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  #ifndef MOD_WATCHDOG_H
    18  #define MOD_WATCHDOG_H
    19  
    20  /**
    21   * @file  mod_watchdog.h
    22   * @brief Watchdog module for Apache
    23   *
    24   * @defgroup MOD_WATCHDOG mod_watchdog
    25   * @ingroup  APACHE_MODS
    26   * @{
    27   */
    28  
    29  #include "httpd.h"
    30  #include "http_config.h"
    31  #include "http_log.h"
    32  #include "ap_provider.h"
    33  
    34  #include "apr.h"
    35  #include "apr_strings.h"
    36  #include "apr_pools.h"
    37  #include "apr_shm.h"
    38  #include "apr_hash.h"
    39  #include "apr_hooks.h"
    40  #include "apr_optional.h"
    41  #include "apr_file_io.h"
    42  #include "apr_time.h"
    43  #include "apr_thread_proc.h"
    44  #include "apr_global_mutex.h"
    45  #include "apr_thread_mutex.h"
    46  
    47  #ifdef __cplusplus
    48  extern "C" {
    49  #endif
    50  
    51  /**
    52   * Default singleton watchdog instance name.
    53   * Singleton watchdog is protected by mutex and
    54   * guaranteed to be run inside a single child process
    55   * at any time.
    56   */
    57  #define AP_WATCHDOG_SINGLETON       "_singleton_"
    58  
    59  /**
    60   * Default watchdog instance name
    61   */
    62  #define AP_WATCHDOG_DEFAULT         "_default_"
    63  
    64  /**
    65   * Default Watchdog interval
    66   */
    67  #define AP_WD_TM_INTERVAL           APR_TIME_C(1000000)  /* 1 second     */
    68  
    69  /**
    70   * Watchdog thread timer resolution
    71   */
    72  #define AP_WD_TM_SLICE              APR_TIME_C(100000)   /* 100 ms       */
    73  
    74  /* State values for callback */
    75  #define AP_WATCHDOG_STATE_STARTING  1
    76  #define AP_WATCHDOG_STATE_RUNNING   2
    77  #define AP_WATCHDOG_STATE_STOPPING  3
    78  
    79  typedef struct ap_watchdog_t ap_watchdog_t;
    80  
    81  /* Create a set of AP_WD_DECLARE(type), AP_WD_DECLARE_NONSTD(type) and
    82   * AP_WD_DECLARE_DATA with appropriate export and import tags for the platform
    83   */
    84  #if !defined(AP_WD_DECLARE)
    85  #if !defined(WIN32)
    86  #define AP_WD_DECLARE(type)            type
    87  #define AP_WD_DECLARE_NONSTD(type)     type
    88  #define AP_WD_DECLARE_DATA
    89  #elif defined(AP_WD_DECLARE_STATIC)
    90  #define AP_WD_DECLARE(type)            type __stdcall
    91  #define AP_WD_DECLARE_NONSTD(type)     type
    92  #define AP_WD_DECLARE_DATA
    93  #elif defined(AP_WD_DECLARE_EXPORT)
    94  #define AP_WD_DECLARE(type)            __declspec(dllexport) type __stdcall
    95  #define AP_WD_DECLARE_NONSTD(type)     __declspec(dllexport) type
    96  #define AP_WD_DECLARE_DATA             __declspec(dllexport)
    97  #else
    98  #define AP_WD_DECLARE(type)            __declspec(dllimport) type __stdcall
    99  #define AP_WD_DECLARE_NONSTD(type)     __declspec(dllimport) type
   100  #define AP_WD_DECLARE_DATA             __declspec(dllimport)
   101  #endif
   102  #endif
   103  
   104  /**
   105   * Callback function used for watchdog.
   106   * @param state Watchdog state function. See @p AP_WATCHDOG_STATE_ .
   107   * @param data is what was passed to @p ap_watchdog_register_callback function.
   108   * @param pool Temporary callback pool destroyed after the call.
   109   * @return APR_SUCCESS to continue calling this callback.
   110   */
   111  typedef apr_status_t ap_watchdog_callback_fn_t(int state, void *data,
   112                                                 apr_pool_t *pool);
   113  
   114  /**
   115   * Get watchdog instance.
   116   * @param watchdog Storage for watchdog instance.
   117   * @param name Watchdog name.
   118   * @param parent Non-zero to get the parent process watchdog instance.
   119   * @param singleton Non-zero to get the singleton watchdog instance.
   120   * @param p The pool to use.
   121   * @return APR_SUCCESS if all went well
   122   * @remark Use @p AP_WATCHDOG_DEFAULT to get default watchdog instance.
   123   *         If separate watchdog thread is needed provide unique name
   124   *         and function will create a new watchdog instance.
   125   *         Note that default client process watchdog works in singleton mode.
   126   */
   127  APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_watchdog_get_instance,
   128                          (ap_watchdog_t **watchdog, const char *name, int parent,
   129                           int singleton, apr_pool_t *p));
   130  
   131  /**
   132   * Register watchdog callback.
   133   * @param watchdog Watchdog to use
   134   * @param interval Interval on which the callback function will execute.
   135   * @param callback  The function to call on watchdog event.
   136   * @param data The data to pass to the callback function.
   137   * @return APR_SUCCESS if all went well. APR_EEXIST if already registered.
   138   */
   139  APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_watchdog_register_callback,
   140                          (ap_watchdog_t *watchdog, apr_interval_time_t interval,
   141                           const void *data, ap_watchdog_callback_fn_t *callback));
   142  
   143  /**
   144   * Update registered watchdog callback interval.
   145   * @param w Watchdog to use
   146   * @param interval New interval on which the callback function will execute.
   147   * @param callback  The function to call on watchdog event.
   148   * @param data The data to pass to the callback function.
   149   * @return APR_SUCCESS if all went well. APR_EOF if callback was not found.
   150   */
   151  APR_DECLARE_OPTIONAL_FN(apr_status_t, ap_watchdog_set_callback_interval,
   152                          (ap_watchdog_t *w, apr_interval_time_t interval,
   153                           const void *data, ap_watchdog_callback_fn_t *callback));
   154  
   155  /**
   156   * Watchdog require hook.
   157   * @param s The server record
   158   * @param name Watchdog name.
   159   * @param parent Non-zero to indicate the parent process watchdog mode.
   160   * @param singleton Non-zero to indicate the singleton watchdog mode.
   161   * @return OK to enable notifications from this watchdog, DECLINED otherwise.
   162   * @remark This is called in post config phase for all watchdog instances
   163   *         that have no callbacks registered. Modules using this hook
   164   *         should ensure that their post_config hook is called after watchdog
   165   *         post_config.
   166   */
   167  APR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_need, (server_rec *s,
   168                            const char *name,
   169                            int parent, int singleton))
   170  
   171  
   172  /**
   173   * Watchdog initialize hook.
   174   * It is called after the watchdog thread is initialized.
   175   * @param s The server record
   176   * @param name Watchdog name.
   177   * @param pool The pool used to create the watchdog.
   178   */
   179  APR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_init, (
   180                            server_rec *s,
   181                            const char *name,
   182                            apr_pool_t *pool))
   183  
   184  /**
   185   * Watchdog terminate hook.
   186   * It is called when the watchdog thread is terminated.
   187   * @param s The server record
   188   * @param name Watchdog name.
   189   * @param pool The pool used to create the watchdog.
   190   */
   191  APR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_exit, (
   192                            server_rec *s,
   193                            const char *name,
   194                            apr_pool_t *pool))
   195  
   196  /**
   197   * Fixed interval watchdog hook.
   198   * It is called regularly on @p AP_WD_TM_INTERVAL interval.
   199   * @param s The server record
   200   * @param name Watchdog name.
   201   * @param pool Temporary pool destroyed after the call.
   202   */
   203  APR_DECLARE_EXTERNAL_HOOK(ap, AP_WD, int, watchdog_step, (
   204                            server_rec *s,
   205                            const char *name,
   206                            apr_pool_t *pool))
   207  
   208  #ifdef __cplusplus
   209  }
   210  #endif
   211  
   212  #endif /* MOD_WATCHDOG_H */
   213  /** @} */