mod_slotmem_plain.c revision 4736b790b4c02a55e20019eb3c733d0b5c3f86c8
6c450637c2a11b8ed8d8cb169f285a66d42ab40dslive/* Licensed to the Apache Software Foundation (ASF) under one or more
530eba85dbd41b8a0fa5255d3648d1440199a661slive * contributor license agreements. See the NOTICE file distributed with
e942c741056732f50da2074b36fe59805d370650slive * this work for additional information regarding copyright ownership.
5f5d1b4cc970b7f06ff8ef6526128e9a27303d88nd * The ASF licenses this file to You under the Apache License, Version 2.0
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd * (the "License"); you may not use this file except in compliance with
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd * the License. You may obtain a copy of the License at
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * Unless required by applicable law or agreed to in writing, software
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * distributed under the License is distributed on an "AS IS" BASIS,
db479b48bd4d75423ed4a45e15b75089d1a8ad72fielding * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd * See the License for the specific language governing permissions and
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd * limitations under the License.
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd/* Memory handler for a plain memory divided in slot.
d5d794fc2f4cc9ca6d6da17cfa2cdcd8d244bacdnd * This one uses plain memory.
7db9f691a00ead175b03335457ca296a33ddf31bnd#define AP_SLOTMEM_IS_PREGRAB(t) (t->type & AP_SLOTMEM_TYPE_PREGRAB)
9e5b899a4f4a0310a818f3e94d94f4df76f5dcb1jerenkrantz struct ap_slotmem_instance_t *next; /* location of next allocated segment */
6c450637c2a11b8ed8d8cb169f285a66d42ab40dslive/* global pool and list of slotmem we are handling */
812b14a17af03d7626429bc2525469bbd19e43b6ndstatic struct ap_slotmem_instance_t *globallistmem = NULL;
f45bc3cb163d979cc1472fe28052debffca056e9covenerstatic apr_status_t slotmem_do(ap_slotmem_instance_t *mem, ap_slotmem_callback_fn_t *func, void *data, apr_pool_t *pool)
f45bc3cb163d979cc1472fe28052debffca056e9covener unsigned int i;
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78ndstatic 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)
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78nd const char *fname;
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78nd /* first try to attach to existing slotmem */
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78nd /* we already have it */
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78nd /* create the memory using the gpool */
9e8c2603790f490398a0fabf97866b6815748a54ianh res = (ap_slotmem_instance_t *) apr_pcalloc(gpool, sizeof(ap_slotmem_instance_t));
b65ee0152f3a120deff1c7573faaf64fe08cdcf4mrumph res->base = apr_pcalloc(gpool, basesize + (item_num * sizeof(char)));
9e8c2603790f490398a0fabf97866b6815748a54ianh /* For the chained slotmem stuff */
7087ccb939b4146f850f4d482fd8ab13de6335dchumbedoohstatic 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)
9e8c2603790f490398a0fabf97866b6815748a54ianh const char *fname;
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78nd /* first try to attach to existing slotmem */
7087ccb939b4146f850f4d482fd8ab13de6335dchumbedooh /* we already have it */
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78ndstatic apr_status_t slotmem_dptr(ap_slotmem_instance_t *score, unsigned int id, void **mem)
d0c7caa0ed5abc1674e52e533fcb4d7fccb66a78ndstatic apr_status_t slotmem_get(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *dest, apr_size_t dest_len)
860b4efe27e7c1c9a2bf5c872b29c90f76849b51jim if (id >= slot->num || (AP_SLOTMEM_IS_PREGRAB(slot) && !*inuse)) {
6c450637c2a11b8ed8d8cb169f285a66d42ab40dslivestatic apr_status_t slotmem_put(ap_slotmem_instance_t *slot, unsigned int id, unsigned char *src, apr_size_t src_len)
d331506ea4fb6d2a62014bf8a85b10b378b68cdbrbowen if (id >= slot->num || (AP_SLOTMEM_IS_PREGRAB(slot) && !*inuse)) {
5d01f40ffd657dd2ac567aacd93cabd162ddfa79coarstatic unsigned int slotmem_num_slots(ap_slotmem_instance_t *slot)
5d01f40ffd657dd2ac567aacd93cabd162ddfa79coarstatic apr_size_t slotmem_slot_size(ap_slotmem_instance_t *slot)
d331506ea4fb6d2a62014bf8a85b10b378b68cdbrbowen * XXXX: if !AP_SLOTMEM_IS_PREGRAB, then still worry about
d331506ea4fb6d2a62014bf8a85b10b378b68cdbrbowen * inuse for grab and return?
d331506ea4fb6d2a62014bf8a85b10b378b68cdbrbowenstatic apr_status_t slotmem_grab(ap_slotmem_instance_t *slot, unsigned int *id)
d331506ea4fb6d2a62014bf8a85b10b378b68cdbrbowen unsigned int i;
7087ccb939b4146f850f4d482fd8ab13de6335dchumbedoohstatic apr_status_t slotmem_release(ap_slotmem_instance_t *slot, unsigned int id)
812b14a17af03d7626429bc2525469bbd19e43b6nd "plainmem",
7087ccb939b4146f850f4d482fd8ab13de6335dchumbedoohstatic int pre_config(apr_pool_t *p, apr_pool_t *plog,
6c450637c2a11b8ed8d8cb169f285a66d42ab40dslive /* XXX: static const char * const prePos[] = { "mod_slotmem.c", NULL }; */
9e5b899a4f4a0310a818f3e94d94f4df76f5dcb1jerenkrantz ap_register_provider(p, AP_SLOTMEM_PROVIDER_GROUP, "plain", "0", &storage);
9e5b899a4f4a0310a818f3e94d94f4df76f5dcb1jerenkrantz ap_hook_pre_config(pre_config, NULL, NULL, APR_HOOK_MIDDLE);
bbb1a0a4af32c90ec08166ec7c2e2cdd201009b1yoshikimodule AP_MODULE_DECLARE_DATA slotmem_plain_module = {
9e5b899a4f4a0310a818f3e94d94f4df76f5dcb1jerenkrantz NULL, /* merge per-directory config structures */
9e5b899a4f4a0310a818f3e94d94f4df76f5dcb1jerenkrantz ap_slotmem_plain_register_hook /* register hooks */