30#define AP_SLOTMEM_IS_PREGRAB(t) (t->desc->type & AP_SLOTMEM_TYPE_PREGRAB)
31#define AP_SLOTMEM_IS_PERSIST(t) (t->desc->type & AP_SLOTMEM_TYPE_PERSIST)
32#define AP_SLOTMEM_IS_CLEARINUSE(t) (t->desc->type & AP_SLOTMEM_TYPE_CLEARINUSE)
41#define AP_SLOTMEM_OFFSET (APR_ALIGN_DEFAULT(sizeof(sharedslotdesc_t)))
42#define AP_UNSIGNEDINT_OFFSET (APR_ALIGN_DEFAULT(sizeof(unsigned int)))
75#define DEFAULT_SLOTMEM_PREFIX "slotmem-shm-"
76#define DEFAULT_SLOTMEM_SUFFIX ".shm"
77#define DEFAULT_SLOTMEM_PERSIST_SUFFIX ".persist"
259 "persisted slotmem md5/desc mismatch");
263 "persisted slotmem at EOF... bypassing md5/desc match check "
264 "(old persist file?)");
273 "persisted slotmem read had unexpected size");
333 ptr +=
mem->desc->size;
369 "create found %s in global list",
fname);
379 "create didn't find %s in global list",
fname);
410 "create: apr_shm_%s(%s) %s",
452 res->persist = (
void *)ptr;
453 res->num_free = (
unsigned int *)ptr;
458 res->base = (
void *)ptr;
496 "attach looking for %s",
fname);
534 res->persist = (
void *)ptr;
535 res->num_free = (
unsigned int *)ptr;
537 res->base = (
void *)ptr;
554 unsigned int id,
void **
mem)
561 if (
id >=
slot->desc->num) {
565 ptr = (
char *)
slot->base +
slot->desc->size *
id;
585 if (
id >=
slot->desc->num) {
612 if (
id >=
slot->desc->num) {
629 return slot->desc->num;
635 return *
slot->num_free;
637 unsigned int i, counter=0;
649 return slot->desc->size;
668 if (
i >=
slot->desc->num) {
670 "slotmem(%s) grab failed. Num %u/num_free %u",
689 if (
id >=
slot->desc->num) {
691 "slotmem(%s) fgrab failed. Num %u/num_free %u",
716 if (
id >=
slot->desc->num || !
inuse[
id] ) {
718 "slotmem(%s) release failed. Num %u/inuse[%u] %d",
721 if (
id >=
slot->desc->num) {
Apache Multi-Processing Module library.
Memory Slot Extension Storage Module for Apache.
char * ap_runtime_dir_relative(apr_pool_t *p, const char *fname)
void ap_hook_post_config(ap_HOOK_post_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
#define AP_DECLARE_MODULE(foo)
void ap_hook_pre_config(ap_HOOK_pre_config_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
server_rec * ap_server_conf
apr_status_t ap_register_provider(apr_pool_t *pool, const char *provider_group, const char *provider_name, const char *provider_version, const void *provider)
#define APR_MD5_DIGESTSIZE
#define APR_STATUS_IS_EEXIST(s)
apr_pool_t apr_dbd_t apr_dbd_results_t ** res
#define AP_SLOTMEM_TYPE_PERSIST
unsigned int ap_slotmem_type_t
#define AP_SLOTMEM_PROVIDER_GROUP
#define AP_SLOTMEM_PROVIDER_VERSION
apr_status_t ap_slotmem_callback_fn_t(void *mem, void *data, apr_pool_t *pool)
#define STANDARD20_MODULE_STUFF
int ap_os_is_path_absolute(apr_pool_t *p, const char *dir)
const char int apr_pool_t * pool
int strcasecmp(const char *a, const char *b)
const char apr_uint32_t * id
apr_interval_time_t apr_pollcb_cb_t func
#define apr_pcalloc(p, size)
apr_size_t const char * filename
apr_status_t ap_mpm_query(int query_code, int *result)
#define AP_MPMQ_GENERATION
static ap_slotmem_instance_t * slotmem
static int post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
static apr_size_t slotmem_slot_size(ap_slotmem_instance_t *slot)
static struct ap_slotmem_instance_t * globallistmem
#define AP_SLOTMEM_OFFSET
#define AP_UNSIGNEDINT_OFFSET
static int pre_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp)
static unsigned int slotmem_num_free_slots(ap_slotmem_instance_t *slot)
static void store_slotmem(ap_slotmem_instance_t *slotmem)
static apr_status_t slotmem_create(ap_slotmem_instance_t **new, const char *name, apr_size_t item_size, unsigned int item_num, ap_slotmem_type_t type, apr_pool_t *pool)
#define AP_SLOTMEM_IS_PREGRAB(t)
static apr_status_t slotmem_attach(ap_slotmem_instance_t **new, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool)
static apr_status_t slotmem_put(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *src, apr_size_t src_len)
static apr_status_t slotmem_doall(ap_slotmem_instance_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool)
static apr_status_t restore_slotmem(sharedslotdesc_t *desc, const char *storename, apr_size_t size, apr_pool_t *pool)
static const ap_slotmem_provider_t * slotmem_shm_getstorage(void)
static apr_status_t slotmem_get(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *dest, apr_size_t dest_len)
static apr_pool_t * gpool
static APR_INLINE int is_child_process(void)
static void ap_slotmem_shm_register_hook(apr_pool_t *p)
static unsigned int slotmem_num_slots(ap_slotmem_instance_t *slot)
#define DEFAULT_SLOTMEM_SUFFIX
static void slotmem_clearinuse(ap_slotmem_instance_t *slot)
static apr_status_t cleanup_slotmem(void *param)
#define AP_SLOTMEM_IS_CLEARINUSE(t)
#define AP_SLOTMEM_IS_PERSIST(t)
static apr_status_t slotmem_dptr(ap_slotmem_instance_t *slot, unsigned int id, void **mem)
static apr_status_t slotmem_release(ap_slotmem_instance_t *slot, unsigned int id)
#define DEFAULT_SLOTMEM_PREFIX
static const ap_slotmem_provider_t storage
#define DEFAULT_SLOTMEM_PERSIST_SUFFIX
static int slotmem_filenames(apr_pool_t *pool, const char *slotname, const char **filename, const char **persistname)
static apr_status_t slotmem_grab(ap_slotmem_instance_t *slot, unsigned int *id)
static apr_status_t slotmem_fgrab(ap_slotmem_instance_t *slot, unsigned int id)
const sharedslotdesc_t * desc
struct ap_slotmem_instance_t * next
A structure to store information for each virtual server.