## NAME

ACE_Shared_Memory_Pool - Make a memory pool that is based on System V shared memory (shmget(2) etc.). This implementation allows memory to be shared between processes.

## SYNOPSIS

    #include <ace/ACE_Memory_Pool.h>

    class ACE_Shared_Memory_Pool : public ACE_Event_Handler
    {
      public:
        typedef ACE_Shared_Memory_Pool_Options OPTIONS;
        ACE_Shared_Memory_Pool (
            LPCTSTR backing_store_name = 0,
            const OPTIONS *options = 0
            );
        virtual ~ACE_Shared_Memory_Pool (void);
        virtual void *init_acquire (
            size_t nbytes,
            size_t &rounded_bytes,
            int &first_time
            );
        virtual void *acquire (size_t nbytes, size_t &rounded_bytes);
        virtual int release (void);
        virtual int sync (ssize_t len = -1, int flags = MS_SYNC);
        virtual int sync (void *addr, size_t len, int flags = MS_SYNC);
        virtual int protect (ssize_t len = -1, int prot = PROT_RDWR);
        virtual int protect (
            void *addr,
            size_t len,
            int prot = PROT_RDWR
            );
        virtual void dump (void) const;
        ACE_ALLOC_HOOK_DECLARE;
      protected:
        virtual size_t round_up (size_t nbytes);
        virtual int commit_backing_store_name (
            size_t rounded_bytes,
            off_t &offset
            );

        struct SHM_TABLE
        {
          public:
            key_t key_;
            int shmid_;
            int used_;
        };

`void *base_addr_;` `size_t file_perms_;` `size_t max_segments_;` `off_t minimum_bytes_;` `size_t segment_size_;` `key_t base_shm_key_;` `virtual int find_seg ( const void *const searchPtr, off_t &offset, size_t &counter );` `virtual int in_use (off_t &offset, size_t &counter);` `ACE_Sig_Handler signal_handler_;` `virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);` `};`

## Keeps track of all the segments being used.

    void *base_addr_;

Base address of the shared memory segment. If this has the value of 0 then the OS is free to select any address, otherwise this value is what the OS must try to use to map the shared memory segment.

    size_t file_perms_;

File permissions to use when creating/opening a segment.

    size_t max_segments_;

Number of shared memory segments in the `SHM_TABLE` table.

    off_t minimum_bytes_;

What the minimim bytes of the initial segment should be.

    size_t segment_size_;

Shared memory segment size.

    key_t base_shm_key_;

Base shared memory key for the segment.

    virtual int find_seg (
        const void *const searchPtr,
        off_t &offset,
        size_t &counter
        );

find the segment that contains the searchPtr

    virtual int in_use (off_t &offset, size_t &counter);

Determine how much memory is currently in use.

    ACE_Sig_Handler signal_handler_;

Handles SIGSEGV.

    virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);

Handle SIGSEGV and SIGBUS signals to remap shared memory properly.

## AUTHOR

Doug Schmidt and Prashant Jain

## LIBRARY

ace