Apache HTTP Server Version 2.4

Apache > HTTP Server > Documentation > Version 2.4 > Modules

# Apache Module mod_slotmem_shm

Available Languages: en | fr

Description: | Slot-based shared memory provider.
Status: | Extension
Module Identifier: | slotmem_shm_module
Source File: | mod_slotmem_shm.c

### Summary

`mod_slotmem_shm` is a memory provider which provides for creation and access to a shared memory segment in which the datasets are organized in "slots."

All shared memory is cleared and cleaned with each restart, whether graceful or not. The data itself is stored and restored within a file noted by the `name` parameter in the `create` and `attach` calls. If not specified with an absolute path, the file will be created relative to the path specified by the `DefaultRuntimeDir` directive.

`mod_slotmem_shm` provides the following API functions:

    /* call the callback on all worker slots */
    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. 'name' is used to generate a filename for the persistent
       store of the shared memory if configured. Values are:
          "none"                - Anonymous shared memory and no persistent store
          "file-name"           - [DefaultRuntimeDir]/file-name
          "/absolute-file-name" - Absolute file name */
    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. See 'create()' for description of 'name' parameter */
    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 direct pointer to the memory associated with this worker slot */
    apr_status_t dptr(ap_slotmem_instance_t *s, unsigned int item_id, void **mem)

    /* get/read the memory from this slot to dest */
    apr_status_t get(ap_slotmem_instance_t *s, unsigned int item_id, unsigned char *dest, apr_size_t dest_len)

    /* put/write the data from src to this slot */
    apr_status_t put(ap_slotmem_instance_t *slot, unsigned int item_id, unsigned char *src, apr_size_t src_len)

    /* return the total number of slots in the segment */
    unsigned int num_slots(ap_slotmem_instance_t *s)

    /* return the total data size, in bytes, of a slot in the segment */
    apr_size_t slot_size(ap_slotmem_instance_t *s)

    /* grab or allocate the first free slot and mark as in-use (does not do any data copying) */
    apr_status_t grab(ap_slotmem_instance_t *s, unsigned int *item_id)

    /* forced grab or allocate the specified slot and mark as in-use (does not do any data copying) */
    apr_status_t fgrab(ap_slotmem_instance_t *s, unsigned int item_id)

    /* release or free a slot and mark as not in-use (does not do any data copying) */
    apr_status_t release(ap_slotmem_instance_t *s, unsigned int item_id)

### Directives

This module provides no directives.

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

### See also

- Comments

Available Languages: en | fr

## Comments

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.