From: Jim Jagielski Date: Fri, 15 May 2009 15:04:37 +0000 (+0000) Subject: Final ( :) ) step to transition which removes the ap_slotmem_foo X-Git-Tag: 2.3.3~579 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d03dc3ead41b0393b5e848398d664e3cff95a74a;p=thirdparty%2Fapache%2Fhttpd.git Final ( :) ) step to transition which removes the ap_slotmem_foo API and just does providers direct git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@775176 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/include/ap_slotmem.h b/include/ap_slotmem.h index e59ef72096c..219556e179f 100644 --- a/include/ap_slotmem.h +++ b/include/ap_slotmem.h @@ -48,13 +48,16 @@ #include /* for getpid() */ #endif -#define AP_SLOTMEM_STORAGE "slotmem" +#ifdef __cplusplus +extern "C" { +#endif + +#define AP_SLOTMEM_PROVIDER_GROUP "slotmem" +#define AP_SLOTMEM_PROVIDER_VERSION 0 -typedef enum { - SLOTMEM_PERSIST /* create a persistent slotmem */ -} apslotmem_type; +typedef unsigned int ap_slotmem_type_t; -typedef struct ap_slotmem_t ap_slotmem_t; +typedef struct ap_slotmem_instance_t ap_slotmem_instance_t; /** * callback function used for slotmem. @@ -65,7 +68,7 @@ typedef struct ap_slotmem_t ap_slotmem_t; */ typedef apr_status_t ap_slotmem_callback_fn_t(void* mem, void *data, apr_pool_t *pool); -struct ap_slotmem_storage_method { +struct ap_slotmem_provider_t { /* * Name of the provider method */ @@ -78,7 +81,7 @@ struct ap_slotmem_storage_method { * @param pool is pool used * @return APR_SUCCESS if all went well */ - apr_status_t (* slotmem_do)(ap_slotmem_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool); + apr_status_t (* doall)(ap_slotmem_instance_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool); /** * create a new slotmem with each item size is item_size. * This would create shared memory, basically. @@ -89,7 +92,7 @@ struct ap_slotmem_storage_method { * @param pool is pool used * @return APR_SUCCESS if all went well */ - apr_status_t (* slotmem_create)(ap_slotmem_t **new, const char *name, apr_size_t item_size, unsigned int item_num, apslotmem_type type, apr_pool_t *pool); + apr_status_t (* 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); /** * attach to an existing slotmem. * This would attach to shared memory, basically. @@ -99,7 +102,7 @@ struct ap_slotmem_storage_method { * @param pool is pool to memory allocate. * @return APR_SUCCESS if all went well */ - apr_status_t (* slotmem_attach)(ap_slotmem_t **new, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool); + apr_status_t (* attach)(ap_slotmem_instance_t **new, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool); /** * get the memory ptr associated with this worker slot. * @param s ap_slotmem_t to use. @@ -107,7 +110,7 @@ struct ap_slotmem_storage_method { * @param mem address to store the pointer to the slot * @return APR_SUCCESS if all went well */ - apr_status_t (* slotmem_mem)(ap_slotmem_t *s, unsigned int item_id, void**mem); + apr_status_t (* dptr)(ap_slotmem_instance_t *s, unsigned int item_id, void**mem); /** * retrieve the memory associated with this worker slot. * @param s ap_slotmem_t to use. @@ -116,7 +119,7 @@ struct ap_slotmem_storage_method { * @param dest_len length of dataset to retrieve * @return APR_SUCCESS if all went well */ - apr_status_t (* slotmem_get)(ap_slotmem_t *s, unsigned int item_id, unsigned char *dest, apr_size_t dest_len); + apr_status_t (* get)(ap_slotmem_instance_t *s, unsigned int item_id, unsigned char *dest, apr_size_t dest_len); /** * store the memory associated with this worker slot. * @param s ap_slotmem_t to use. @@ -125,120 +128,24 @@ struct ap_slotmem_storage_method { * @param src_len length of dataset to store in the slot * @return APR_SUCCESS if all went well */ - apr_status_t (* slotmem_put)(ap_slotmem_t *slot, unsigned int item_id, unsigned char *src, apr_size_t src_len); + apr_status_t (* put)(ap_slotmem_instance_t *slot, unsigned int item_id, unsigned char *src, apr_size_t src_len); /** * return number of slots allocated for this entry. * @param s ap_slotmem_t to use. * @return number of slots */ - unsigned int (* slotmem_num_slots)(ap_slotmem_t *s); + unsigned int (* num_slots)(ap_slotmem_instance_t *s); /** * return slot size allocated for this entry. * @param s ap_slotmem_t to use. * @return size of slot */ - apr_size_t (* slotmem_slot_size)(ap_slotmem_t *s); + apr_size_t (* slot_size)(ap_slotmem_instance_t *s); }; -typedef struct ap_slotmem_storage_method ap_slotmem_storage_method; - -/* - * mod_slotmem externals exposed to the outside world. - * Thus the provider nature of mod_slotmem is somewhat insulated - * from the end user but can still be used directed if need - * be. The rationale is to make it easier for additional - * memory providers to be provided and having a single - * simple interface for all - */ -/** - * obtain the array of provider methods desired - * @param pool is the pool to use - * @return pointer to array of provider names available - */ -AP_DECLARE(apr_array_header_t *) ap_slotmem_methods(apr_pool_t *pool); -/** - * obtain the provider method desired - * @param provider is name of the provider to use - * @return pointer to provider or NULL - */ -AP_DECLARE(ap_slotmem_storage_method *) ap_slotmem_method(const char *provider); -/** - * call the callback on all worker slots - * @param sm ap_slotmem_storage_method provider obtained - * @param s ap_slotmem_t to use. - * @param funct callback function to call for each element. - * @param data parameter for the callback function. - * @param pool is pool used - * @return APR_SUCCESS if all went well - */ -AP_DECLARE(apr_status_t) ap_slotmem_do(ap_slotmem_storage_method *sm, ap_slotmem_t *s, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool); - -/** - * create a new slotmem with each item size is item_size. - * This would create shared memory, basically. - * @param sm ap_slotmem_storage_method provider obtained - * @param name is a key used for debugging and in mod_status output or allow another process to share this space. - * @param item_size size of each item - * @param item_num number of item to create. - * @param type (persistent/allocatable/etc) - * @param pool is pool used - * @return APR_SUCCESS if all went well - */ -AP_DECLARE(apr_status_t) ap_slotmem_create(ap_slotmem_storage_method *sm, ap_slotmem_t **new, const char *name, apr_size_t item_size, unsigned int item_num, apslotmem_type type, apr_pool_t *pool); - -/** - * attach to an existing slotmem. - * This would attach to shared memory, basically. - * @param sm ap_slotmem_storage_method provider obtained - * @param name is a key used for debugging and in mod_status output or allow another process to share this space. - * @param item_size size of each item - * @param item_num max number of item. - * @param pool is pool to memory allocate. - * @return APR_SUCCESS if all went well - */ -AP_DECLARE(apr_status_t) ap_slotmem_attach(ap_slotmem_storage_method *sm, ap_slotmem_t **new, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool); -/** - * get the memory associated with this worker slot. - * @param sm ap_slotmem_storage_method provider obtained - * @param s ap_slotmem_t to use. - * @param item_id item to return for 0 to item_num - * @param mem address to store the pointer to the slot - * @return APR_SUCCESS if all went well - */ -AP_DECLARE(apr_status_t) ap_slotmem_mem(ap_slotmem_storage_method *sm, ap_slotmem_t *s, unsigned int item_id, void**mem); -/** - * retrieve the memory associated with this worker slot. - * @param sm ap_slotmem_storage_method provider obtained - * @param s ap_slotmem_t to use. - * @param item_id item to return for 0 to item_num - * @param dest address to store the data - * @param dest_len length of dataset to retrieve - * @return APR_SUCCESS if all went well - */ -AP_DECLARE(apr_status_t) ap_slotmem_get(ap_slotmem_storage_method *sm, ap_slotmem_t *s, unsigned int item_id, unsigned char *dest, apr_size_t dest_len); -/** - * store the memory associated with this worker slot. - * @param sm ap_slotmem_storage_method provider obtained - * @param s ap_slotmem_t to use. - * @param item_id item to return for 0 to item_num - * @param src address of the data to store in the slot - * @param src_len length of dataset to store in the slot - * @return APR_SUCCESS if all went well - */ -AP_DECLARE(apr_status_t) ap_slotmem_put(ap_slotmem_storage_method *sm, ap_slotmem_t *s, unsigned int item_id, unsigned char *src, apr_size_t src_len); -/** - * return number of slots allocated for this entry. - * @param sm ap_slotmem_storage_method provider obtained - * @param s ap_slotmem_t to use. - * @return number of slots - */ -AP_DECLARE(unsigned int) ap_slotmem_num_slots(ap_slotmem_storage_method *sm, ap_slotmem_t *s); -/** - * return slot size allocated for this entry. - * @param sm ap_slotmem_storage_method provider obtained - * @param s ap_slotmem_t to use. - * @return size of slot - */ -AP_DECLARE(apr_size_t) ap_slotmem_slot_size(ap_slotmem_storage_method *sm, ap_slotmem_t *s); +#ifdef __cplusplus +} +#endif -#endif /*SLOTMEM_H*/ +#endif +/** @} */ diff --git a/modules/slotmem/mod_slotmem_plain.c b/modules/slotmem/mod_slotmem_plain.c index 25707027fbc..c4e793891f1 100644 --- a/modules/slotmem/mod_slotmem_plain.c +++ b/modules/slotmem/mod_slotmem_plain.c @@ -20,21 +20,21 @@ #include "ap_slotmem.h" -struct ap_slotmem_t { +struct ap_slotmem_instance_t { char *name; /* per segment name */ void *base; /* data set start */ apr_size_t size; /* size of each memory slot */ unsigned int num; /* number of mem slots */ apr_pool_t *gpool; /* per segment global pool */ - struct ap_slotmem_t *next; /* location of next allocated segment */ + struct ap_slotmem_instance_t *next; /* location of next allocated segment */ }; /* global pool and list of slotmem we are handling */ -static struct ap_slotmem_t *globallistmem = NULL; +static struct ap_slotmem_instance_t *globallistmem = NULL; static apr_pool_t *gpool = NULL; -static apr_status_t slotmem_do(ap_slotmem_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool) +static apr_status_t slotmem_do(ap_slotmem_instance_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool) { unsigned int i; void *ptr; @@ -50,10 +50,10 @@ static apr_status_t slotmem_do(ap_slotmem_t *mem, ap_slotmem_callback_fn_t *func return APR_SUCCESS; } -static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t item_size, unsigned int item_num, apslotmem_type type, apr_pool_t *pool) +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) { - ap_slotmem_t *res; - ap_slotmem_t *next = globallistmem; + ap_slotmem_instance_t *res; + ap_slotmem_instance_t *next = globallistmem; const char *fname; if (name) { @@ -76,7 +76,7 @@ static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_siz fname = "anonymous"; /* create the memory using the gpool */ - res = (ap_slotmem_t *) apr_pcalloc(gpool, sizeof(ap_slotmem_t)); + res = (ap_slotmem_instance_t *) apr_pcalloc(gpool, sizeof(ap_slotmem_instance_t)); res->base = apr_pcalloc(gpool, item_size * item_num); if (!res->base) return APR_ENOSHMAVAIL; @@ -95,9 +95,9 @@ static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_siz return APR_SUCCESS; } -static apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool) +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) { - ap_slotmem_t *next = globallistmem; + ap_slotmem_instance_t *next = globallistmem; const char *fname; if (name) { @@ -124,7 +124,7 @@ static apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_siz return APR_ENOSHMAVAIL; } -static apr_status_t slotmem_mem(ap_slotmem_t *score, unsigned int id, void **mem) +static apr_status_t slotmem_mem(ap_slotmem_instance_t *score, unsigned int id, void **mem) { void *ptr; @@ -141,7 +141,7 @@ static apr_status_t slotmem_mem(ap_slotmem_t *score, unsigned int id, void **mem return APR_SUCCESS; } -static apr_status_t slotmem_get(ap_slotmem_t *slot, unsigned int id, unsigned char *dest, apr_size_t dest_len) +static apr_status_t slotmem_get(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *dest, apr_size_t dest_len) { void *ptr; @@ -155,7 +155,7 @@ static apr_status_t slotmem_get(ap_slotmem_t *slot, unsigned int id, unsigned ch return APR_SUCCESS; } -static apr_status_t slotmem_put(ap_slotmem_t *slot, unsigned int id, unsigned char *src, apr_size_t src_len) +static apr_status_t slotmem_put(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *src, apr_size_t src_len) { void *ptr; @@ -169,17 +169,17 @@ static apr_status_t slotmem_put(ap_slotmem_t *slot, unsigned int id, unsigned ch return APR_SUCCESS; } -static unsigned int slotmem_num_slots(ap_slotmem_t *slot) +static unsigned int slotmem_num_slots(ap_slotmem_instance_t *slot) { return slot->num; } -static apr_size_t slotmem_slot_size(ap_slotmem_t *slot) +static apr_size_t slotmem_slot_size(ap_slotmem_instance_t *slot) { return slot->size; } -static const ap_slotmem_storage_method storage = { +static const ap_slotmem_provider_t storage = { "plainmem", &slotmem_do, &slotmem_create, diff --git a/modules/slotmem/mod_slotmem_shm.c b/modules/slotmem/mod_slotmem_shm.c index 7585f2f9fe4..fc7c1824c54 100644 --- a/modules/slotmem/mod_slotmem_shm.c +++ b/modules/slotmem/mod_slotmem_shm.c @@ -39,7 +39,7 @@ #endif #endif -struct ap_slotmem_t { +struct ap_slotmem_instance_t { char *name; /* per segment name */ void *shm; /* ptr to memory segment (apr_shm_t *) */ void *base; /* data set start */ @@ -47,7 +47,7 @@ struct ap_slotmem_t { unsigned int num; /* number of mem slots */ apr_pool_t *gpool; /* per segment global pool */ apr_global_mutex_t *smutex; /* mutex */ - struct ap_slotmem_t *next; /* location of next allocated segment */ + struct ap_slotmem_instance_t *next; /* location of next allocated segment */ char *inuse; /* in-use flag table*/ }; @@ -64,7 +64,7 @@ struct sharedslotdesc { */ /* global pool and list of slotmem we are handling */ -static struct ap_slotmem_t *globallistmem = NULL; +static struct ap_slotmem_instance_t *globallistmem = NULL; static apr_pool_t *gpool = NULL; static apr_global_mutex_t *smutex = NULL; static const char *mutex_fname = NULL; @@ -141,7 +141,7 @@ static const char *store_filename(apr_pool_t *pool, const char *slotmemname) return storename; } -static void store_slotmem(ap_slotmem_t *slotmem) +static void store_slotmem(ap_slotmem_instance_t *slotmem) { apr_file_t *fp; apr_status_t rv; @@ -190,12 +190,12 @@ static void restore_slotmem(void *ptr, const char *name, apr_size_t size, apr_po static apr_status_t cleanup_slotmem(void *param) { - ap_slotmem_t **mem = param; + ap_slotmem_instance_t **mem = param; apr_status_t rv; apr_pool_t *pool = NULL; if (*mem) { - ap_slotmem_t *next = *mem; + ap_slotmem_instance_t *next = *mem; pool = next->gpool; while (next) { store_slotmem(next); @@ -207,7 +207,7 @@ static apr_status_t cleanup_slotmem(void *param) return APR_SUCCESS; } -static apr_status_t slotmem_do(ap_slotmem_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool) +static apr_status_t slotmem_do(ap_slotmem_instance_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool) { unsigned int i; void *ptr; @@ -230,13 +230,13 @@ static apr_status_t slotmem_do(ap_slotmem_t *mem, ap_slotmem_callback_fn_t *func return APR_SUCCESS; } -static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t item_size, unsigned int item_num, apslotmem_type type, apr_pool_t *pool) +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) { /* void *slotmem = NULL; */ void *ptr; struct sharedslotdesc desc; - ap_slotmem_t *res; - ap_slotmem_t *next = globallistmem; + ap_slotmem_instance_t *res; + ap_slotmem_instance_t *next = globallistmem; const char *fname; apr_shm_t *shm; apr_size_t basesize = (item_size * item_num); @@ -322,7 +322,7 @@ static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_siz } /* For the chained slotmem stuff */ - res = (ap_slotmem_t *) apr_pcalloc(gpool, sizeof(ap_slotmem_t)); + res = (ap_slotmem_instance_t *) apr_pcalloc(gpool, sizeof(ap_slotmem_instance_t)); res->name = apr_pstrdup(gpool, fname); res->shm = shm; res->base = ptr; @@ -343,12 +343,12 @@ static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_siz return APR_SUCCESS; } -static apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_size_t *item_size, unsigned int *item_num, apr_pool_t *pool) +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) { /* void *slotmem = NULL; */ void *ptr; - ap_slotmem_t *res; - ap_slotmem_t *next = globallistmem; + ap_slotmem_instance_t *res; + ap_slotmem_instance_t *next = globallistmem; struct sharedslotdesc desc; const char *fname; apr_shm_t *shm; @@ -393,7 +393,7 @@ static apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_siz ptr = ptr + sizeof(desc); /* For the chained slotmem stuff */ - res = (ap_slotmem_t *) apr_pcalloc(gpool, sizeof(ap_slotmem_t)); + res = (ap_slotmem_instance_t *) apr_pcalloc(gpool, sizeof(ap_slotmem_instance_t)); res->name = apr_pstrdup(gpool, fname); res->shm = shm; res->base = ptr; @@ -416,7 +416,7 @@ static apr_status_t slotmem_attach(ap_slotmem_t **new, const char *name, apr_siz return APR_SUCCESS; } -static apr_status_t slotmem_mem(ap_slotmem_t *slot, unsigned int id, void **mem) +static apr_status_t slotmem_mem(ap_slotmem_instance_t *slot, unsigned int id, void **mem) { void *ptr; @@ -436,7 +436,7 @@ static apr_status_t slotmem_mem(ap_slotmem_t *slot, unsigned int id, void **mem) return APR_SUCCESS; } -static apr_status_t slotmem_get(ap_slotmem_t *slot, unsigned int id, unsigned char *dest, apr_size_t dest_len) +static apr_status_t slotmem_get(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *dest, apr_size_t dest_len) { void *ptr; @@ -459,7 +459,7 @@ static apr_status_t slotmem_get(ap_slotmem_t *slot, unsigned int id, unsigned ch return APR_SUCCESS; } -static apr_status_t slotmem_put(ap_slotmem_t *slot, unsigned int id, unsigned char *src, apr_size_t src_len) +static apr_status_t slotmem_put(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *src, apr_size_t src_len) { void *ptr; @@ -482,17 +482,17 @@ static apr_status_t slotmem_put(ap_slotmem_t *slot, unsigned int id, unsigned ch return APR_SUCCESS; } -static unsigned int slotmem_num_slots(ap_slotmem_t *slot) +static unsigned int slotmem_num_slots(ap_slotmem_instance_t *slot) { return slot->num; } -static apr_size_t slotmem_slot_size(ap_slotmem_t *slot) +static apr_size_t slotmem_slot_size(ap_slotmem_instance_t *slot) { return slot->size; } -static apr_status_t slotmem_grab(ap_slotmem_t *slot, unsigned int *id) +static apr_status_t slotmem_grab(ap_slotmem_instance_t *slot, unsigned int *id) { unsigned int i; @@ -520,7 +520,7 @@ static apr_status_t slotmem_grab(ap_slotmem_t *slot, unsigned int *id) return APR_SUCCESS; } -static apr_status_t slotmem_return(ap_slotmem_t *slot, unsigned int id) +static apr_status_t slotmem_return(ap_slotmem_instance_t *slot, unsigned int id) { char *inuse; @@ -541,7 +541,7 @@ static apr_status_t slotmem_return(ap_slotmem_t *slot, unsigned int id) return APR_SUCCESS; } -static const ap_slotmem_storage_method storage = { +static const ap_slotmem_provider_t storage = { "sharedmem", &slotmem_do, &slotmem_create, @@ -554,7 +554,7 @@ static const ap_slotmem_storage_method storage = { }; /* make the storage usuable from outside */ -static const ap_slotmem_storage_method *sharedmem_getstorage(void) +static const ap_slotmem_provider_t *sharedmem_getstorage(void) { return (&storage); } @@ -674,7 +674,7 @@ static void child_init(apr_pool_t *p, server_rec *s) static void ap_sharedmem_register_hook(apr_pool_t *p) { - const ap_slotmem_storage_method *storage = sharedmem_getstorage(); + const ap_slotmem_provider_t *storage = sharedmem_getstorage(); ap_register_provider(p, AP_SLOTMEM_STORAGE, "shared", "0", storage); ap_hook_post_config(post_config, NULL, NULL, APR_HOOK_LAST); ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE); diff --git a/server/Makefile.in b/server/Makefile.in index 1de07db65d3..446c0812005 100644 --- a/server/Makefile.in +++ b/server/Makefile.in @@ -13,7 +13,7 @@ LTLIBRARY_SOURCES = \ util_charset.c util_cookies.c util_debug.c util_xml.c \ util_expr.c util_filter.c util_pcre.c exports.c \ scoreboard.c error_bucket.c protocol.c core.c request.c provider.c \ - eoc_bucket.c eor_bucket.c core_filters.c slotmem.c + eoc_bucket.c eor_bucket.c core_filters.c TARGETS = delete-exports $(LTLIBRARY_NAME) $(CORE_IMPLIB_FILE) export_vars.h httpd.exp