jk_shm.h
来自「以便Apache与其他服务进行整合 Mod_JK安装」· C头文件 代码 · 共 182 行
H
182 行
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//*************************************************************************** * Description: Shared Memory object header file * * Author: Mladen Turk <mturk@jboss.com> * * Author: Rainer Jung <rjung@apache.org> * * Version: $Revision: 550272 $ * ***************************************************************************/#ifndef _JK_SHM_H#define _JK_SHM_H#include "jk_global.h"#include "jk_pool.h"#include "jk_util.h"#ifdef __cplusplusextern "C"{#endif /* __cplusplus *//** * @file jk_shm.h * @brief Jk shared memory management * * */#define JK_SHM_MAJOR '1'#define JK_SHM_MINOR '2'#define JK_SHM_STR_SIZ 63#define JK_SHM_URI_SIZ 127#define JK_SHM_DYNAMIC 16#define JK_SHM_MAGIC '!', 'J', 'K', 'S', 'H', 'M', JK_SHM_MAJOR, JK_SHM_MINOR#define JK_SHM_MAGIC_SIZ 8/* Really huge numbers, but 64 workers should be enough */#define JK_SHM_MAX_WORKERS 64#define JK_SHM_WORKER_SIZE JK_SHM_ALIGN(sizeof(jk_shm_worker_t))#define JK_SHM_DEF_SIZE (JK_SHM_MAX_WORKERS * JK_SHM_WORKER_SIZE)#define JK_SHM_ALIGNMENT 64#define JK_SHM_ALIGN(x) JK_ALIGN(x, JK_SHM_ALIGNMENT)/** jk shm worker record structure */struct jk_shm_worker{ int id; /* Sequence counter starting at 0 and increasing * every time we change the config */ volatile unsigned int sequence; /* Number of currently busy channels */ volatile int busy; /* Maximum number of busy channels */ volatile int max_busy; /* Number of currently connected channels */ volatile int connected; /* worker name */ char name[JK_SHM_STR_SIZ+1]; /* route */ char route[JK_SHM_STR_SIZ+1]; /* worker domain */ char domain[JK_SHM_STR_SIZ+1]; /* worker redirect route */ char redirect[JK_SHM_STR_SIZ+1]; /* worker distance */ volatile int distance; /* current activation state (config) of the worker */ volatile int activation; /* current error state (runtime) of the worker */ volatile int state; /* Current lb factor */ volatile int lb_factor; /* Current lb reciprocal factor */ volatile jk_uint64_t lb_mult; /* Current lb value */ volatile jk_uint64_t lb_value; int sticky_session; int sticky_session_force; int recover_wait_time; int max_reply_timeouts; int retries; int lbmethod; int lblock; unsigned int max_packet_size; /* Statistical data */ volatile time_t error_time; /* Service transfer rate time */ volatile time_t last_maintain_time; /* Number of bytes read from remote */ volatile jk_uint64_t readed; /* Number of bytes transferred to remote */ volatile jk_uint64_t transferred; /* Number of times the worker was elected */ volatile jk_uint64_t elected; /* Number of times the worker was elected - snapshot during maintenance */ volatile jk_uint64_t elected_snapshot; /* Number of non 200 responses */ volatile jk_uint32_t errors; /* Number of recovery attempts */ volatile jk_uint32_t recoveries; /* Number of recovery failures */ volatile jk_uint32_t recovery_errors; /* Decayed number of reply_timeout errors */ volatile jk_uint32_t reply_timeouts; /* Number of client errors */ volatile jk_uint32_t client_errors;};typedef struct jk_shm_worker jk_shm_worker_t;const char *jk_shm_name(void);/* Open the shared memory creating file if needed */int jk_shm_open(const char *fname, size_t sz, jk_logger_t *l);/* Close the shared memory */void jk_shm_close(void);/* Attach the shared memory in child process. * File has to be opened in parent. */int jk_shm_attach(const char *fname, size_t sz, jk_logger_t *l);/* allocate shm memory * If there is no shm present the pool will be used instead */void *jk_shm_alloc(jk_pool_t *p, size_t size);/* allocate shm worker record * If there is no shm present the pool will be used instead */jk_shm_worker_t *jk_shm_alloc_worker(jk_pool_t *p);/* Return workers.properties last modified time */time_t jk_shm_get_workers_time(void);/* Set workers.properties last modified time */void jk_shm_set_workers_time(time_t t);/* Check if the shared memory has been modified * by some other process. */int jk_shm_is_modified(void);/* Synchronize access and modification time. * This function should be called when the shared memory * is modified and after we update the config acording * to the current shared memory data. */void jk_shm_sync_access_time(void);/* Lock shared memory for thread safe access */int jk_shm_lock(void);/* Unlock shared memory for thread safe access */int jk_shm_unlock(void);#ifdef __cplusplus}#endif /* __cplusplus */#endif /* _JK_SHM_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?