#define AP_SLOTMEM_STORAGE "slotmem"
+#define CREPER_SLOTMEM 2 /* create a persistent slotmem */
+
typedef struct ap_slotmem_t ap_slotmem_t;
/**
* @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 type of slotmem.
* @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, apr_pool_t *pool);
+ apr_status_t (* slotmem_create)(ap_slotmem_t **new, const char *name, apr_size_t item_size, unsigned int item_num, int type, apr_pool_t *pool);
/**
* attach to an existing slotmem.
* This would attach to shared memory, basically.
* @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, apr_pool_t *pool);
+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, int type, apr_pool_t *pool);
/**
* attach to an existing slotmem.
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, apr_pool_t *pool)
+static apr_status_t slotmem_create(ap_slotmem_t **new, const char *name, apr_size_t item_size, unsigned int item_num, int type, apr_pool_t *pool)
{
/* void *slotmem = NULL; */
void *ptr;
memcpy(ptr, &desc, sizeof(desc));
ptr = ptr + sizeof(desc);
memset(ptr, 0, item_size * item_num);
- restore_slotmem(ptr, fname, item_size, item_num, pool);
+ if (type & CREPER_SLOTMEM)
+ restore_slotmem(ptr, fname, item_size, item_num, pool);
}
/* For the chained slotmem stuff */
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,
+ int type,
apr_pool_t *pool)
{
- return (sm->slotmem_create(new, name, item_size, item_num, pool));
+ return (sm->slotmem_create(new, name, item_size, item_num, type, pool));
}
AP_DECLARE(apr_status_t) ap_slotmem_attach(ap_slotmem_storage_method *sm,