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_;

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 *);

AUTHOR

Doug Schmidt and Prashant Jain

LIBRARY

ace