summaryrefslogtreecommitdiff
path: root/ace/Memory_Pool.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/Memory_Pool.h')
-rw-r--r--ace/Memory_Pool.h578
1 files changed, 324 insertions, 254 deletions
diff --git a/ace/Memory_Pool.h b/ace/Memory_Pool.h
index 84966642406..657f7fd42f7 100644
--- a/ace/Memory_Pool.h
+++ b/ace/Memory_Pool.h
@@ -1,18 +1,15 @@
/* -*- C++ -*- */
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// ace
-//
-// = FILENAME
-// ACE_Memory_Pool.h
-//
-// = AUTHOR
-// Doug Schmidt and Prashant Jain
-//
-// ============================================================================
+
+//=============================================================================
+/**
+ * @file ACE_Memory_Pool.h
+ *
+ * $Id$
+ *
+ * @author Doug Schmidt and Prashant Jain
+ */
+//=============================================================================
+
#ifndef ACE_MEMORY_POOL_H
#define ACE_MEMORY_POOL_H
@@ -32,84 +29,95 @@
#endif /* !ACE_WIN32 */
#if !defined (ACE_LACKS_SBRK)
+/**
+ * @class ACE_Sbrk_Memory_Pool_Options
+ *
+ * @brief Helper class for Sbrk Memory Pool constructor options.
+ *
+ * This should be a nested class, but that breaks too many
+ * compilers.
+ */
class ACE_Export ACE_Sbrk_Memory_Pool_Options
{
- // = TITLE
- // Helper class for Sbrk Memory Pool constructor options.
- //
- // = DESCRIPTION
- // This should be a nested class, but that breaks too many
- // compilers.
};
+/**
+ * @class ACE_Sbrk_Memory_Pool
+ *
+ * @brief Make a memory pool that is based on <sbrk(2)>.
+ */
class ACE_Export ACE_Sbrk_Memory_Pool
{
- // = TITLE
- // Make a memory pool that is based on <sbrk(2)>.
public:
typedef ACE_Sbrk_Memory_Pool_Options OPTIONS;
+ /// Initialize the pool.
ACE_Sbrk_Memory_Pool (const ACE_TCHAR *backing_store_name = 0,
const OPTIONS *options = 0);
- // Initialize the pool.
virtual ~ACE_Sbrk_Memory_Pool (void);
// = Implementor operations.
+ /// Ask system for initial chunk of local memory.
virtual void *init_acquire (size_t nbytes,
size_t &rounded_bytes,
int &first_time);
- // Ask system for initial chunk of local memory.
+ /// Acquire at least NBYTES from the memory pool. ROUNDED_BYTES is
+ /// the actual number of bytes allocated.
virtual void *acquire (size_t nbytes,
size_t &rounded_bytes);
- // Acquire at least NBYTES from the memory pool. ROUNDED_BYTES is
- // the actual number of bytes allocated.
+ /// Instruct the memory pool to release all of its resources.
virtual int release (void);
- // Instruct the memory pool to release all of its resources.
+ /**
+ * Sync <len> bytes of the memory region to the backing store
+ * starting at <this->base_addr_>. If <len> == -1 then sync the
+ * whole region.
+ */
virtual int sync (ssize_t len = -1, int flags = MS_SYNC);
- // Sync <len> bytes of the memory region to the backing store
- // starting at <this->base_addr_>. If <len> == -1 then sync the
- // whole region.
+ /// Sync <len> bytes of the memory region to the backing store
+ /// starting at <addr_>.
virtual int sync (void *addr, size_t len, int flags = MS_SYNC);
- // Sync <len> bytes of the memory region to the backing store
- // starting at <addr_>.
+ /**
+ * Change the protection of the pages of the mapped region to <prot>
+ * starting at <this->base_addr_> up to <len> bytes. If <len> == -1
+ * then change protection of all pages in the mapped region.
+ */
virtual int protect (ssize_t len = -1, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <this->base_addr_> up to <len> bytes. If <len> == -1
- // then change protection of all pages in the mapped region.
+ /// Change the protection of the pages of the mapped region to <prot>
+ /// starting at <addr> up to <len> bytes.
virtual int protect (void *addr, size_t len, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <addr> up to <len> bytes.
+ /// Dump the state of an object.
virtual void dump (void) const;
- // Dump the state of an object.
+ /// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
- // Declare the dynamic allocation hooks.
protected:
+ /// Implement the algorithm for rounding up the request to an
+ /// appropriate chunksize.
virtual size_t round_up (size_t nbytes);
- // Implement the algorithm for rounding up the request to an
- // appropriate chunksize.
};
#endif /* !ACE_LACKS_SBRK */
#if !defined (ACE_LACKS_SYSV_SHMEM)
+/**
+ * @class ACE_Shared_Memory_Pool_Options
+ *
+ * @brief Helper class for Shared Memory Pool constructor options.
+ *
+ * This should be a nested class, but that breaks too many
+ * compilers.
+ */
class ACE_Export ACE_Shared_Memory_Pool_Options
{
- // = TITLE
- // Helper class for Shared Memory Pool constructor options.
- //
- // = DESCRIPTION
- // This should be a nested class, but that breaks too many
- // compilers.
public:
// = Initialization method.
ACE_Shared_Memory_Pool_Options (const char *base_addr = ACE_DEFAULT_BASE_ADDR,
@@ -118,84 +126,93 @@ public:
off_t minimum_bytes = 0,
size_t segment_size = ACE_DEFAULT_SEGMENT_SIZE);
+ /// Base address of the memory-mapped backing store.
const char *base_addr_;
- // Base address of the memory-mapped backing store.
+ /// Number of shared memory segments to allocate.
size_t max_segments_;
- // Number of shared memory segments to allocate.
+ /// What the minimum bytes of the initial segment should be.
off_t minimum_bytes_;
- // What the minimum bytes of the initial segment should be.
+ /// File permissions to use when creating/opening a segment.
size_t file_perms_;
- // File permissions to use when creating/opening a segment.
+ /// Shared memory segment size.
size_t segment_size_;
- // Shared memory segment size.
};
+/**
+ * @class ACE_Shared_Memory_Pool
+ *
+ * @brief Make a memory pool that is based on System V shared memory
+ * (shmget(2) etc.). This implementation allows memory to be
+ * shared between processes.
+ */
class ACE_Export ACE_Shared_Memory_Pool : public ACE_Event_Handler
{
- // = TITLE
- // Make a memory pool that is based on System V shared memory
- // (shmget(2) etc.). This implementation allows memory to be
- // shared between processes.
public:
typedef ACE_Shared_Memory_Pool_Options OPTIONS;
+ /// Initialize the pool.
ACE_Shared_Memory_Pool (const ACE_TCHAR *backing_store_name = 0,
const OPTIONS *options = 0);
- // Initialize the pool.
virtual ~ACE_Shared_Memory_Pool (void);
+ /// Ask system for initial chunk of local memory.
virtual void *init_acquire (size_t nbytes,
size_t &rounded_bytes,
int &first_time);
- // Ask system for initial chunk of local memory.
+ /**
+ * Acquire at least NBYTES from the memory pool. ROUNDED_BYTES is
+ * the actual number of bytes allocated. Also acquires an internal
+ * semaphore that ensures proper serialization of Memory_Pool
+ * initialization across processes.
+ */
virtual void *acquire (size_t nbytes,
size_t &rounded_bytes);
- // Acquire at least NBYTES from the memory pool. ROUNDED_BYTES is
- // the actual number of bytes allocated. Also acquires an internal
- // semaphore that ensures proper serialization of Memory_Pool
- // initialization across processes.
+ /// Instruct the memory pool to release all of its resources.
virtual int release (void);
- // Instruct the memory pool to release all of its resources.
+ /// Sync the memory region to the backing store starting at
+ /// <this->base_addr_>.
virtual int sync (ssize_t len = -1, int flags = MS_SYNC);
- // Sync the memory region to the backing store starting at
- // <this->base_addr_>.
+ /// Sync the memory region to the backing store starting at <addr_>.
virtual int sync (void *addr, size_t len, int flags = MS_SYNC);
- // Sync the memory region to the backing store starting at <addr_>.
+ /**
+ * Change the protection of the pages of the mapped region to <prot>
+ * starting at <this->base_addr_> up to <len> bytes. If <len> == -1
+ * then change protection of all pages in the mapped region.
+ */
virtual int protect (ssize_t len = -1, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <this->base_addr_> up to <len> bytes. If <len> == -1
- // then change protection of all pages in the mapped region.
+ /// Change the protection of the pages of the mapped region to <prot>
+ /// starting at <addr> up to <len> bytes.
virtual int protect (void *addr, size_t len, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <addr> up to <len> bytes.
+ /// Dump the state of an object.
virtual void dump (void) const;
- // Dump the state of an object.
+ /// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
- // Declare the dynamic allocation hooks.
protected:
+ /// Implement the algorithm for rounding up the request to an
+ /// appropriate chunksize.
virtual size_t round_up (size_t nbytes);
- // Implement the algorithm for rounding up the request to an
- // appropriate chunksize.
+ /**
+ * Commits a new shared memory segment if necessary after an
+ * <acquire> or a signal. <offset> is set to the new offset into
+ * the backing store.
+ */
virtual int commit_backing_store_name (size_t rounded_bytes,
off_t &offset);
- // Commits a new shared memory segment if necessary after an
- // <acquire> or a signal. <offset> is set to the new offset into
- // the backing store.
// = Keeps track of all the segments being used.
struct SHM_TABLE
@@ -210,122 +227,137 @@ protected:
// Is the segment currently used.;
};
+ /**
+ * 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.
+ */
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.
+ /// File permissions to use when creating/opening a segment.
size_t file_perms_;
- // File permissions to use when creating/opening a segment.
+ /// Number of shared memory segments in the <SHM_TABLE> table.
size_t max_segments_;
- // Number of shared memory segments in the <SHM_TABLE> table.
+ /// What the minimim bytes of the initial segment should be.
off_t minimum_bytes_;
- // What the minimim bytes of the initial segment should be.
+ /// Shared memory segment size.
size_t segment_size_;
- // Shared memory segment size.
+ /// Base shared memory key for the segment.
key_t base_shm_key_;
- // Base shared memory key for the segment.
+ /// find the segment that contains the searchPtr
virtual int find_seg (const void *const searchPtr,
off_t &offset,
size_t &counter);
- // find the segment that contains the searchPtr
+ /// Determine how much memory is currently in use.
virtual int in_use (off_t &offset,
size_t &counter);
- // Determine how much memory is currently in use.
+ /// Handles SIGSEGV.
ACE_Sig_Handler signal_handler_;
- // Handles SIGSEGV.
+ /// Handle SIGSEGV and SIGBUS signals to remap shared memory
+ /// properly.
virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);
- // Handle SIGSEGV and SIGBUS signals to remap shared memory
- // properly.
};
#endif /* !ACE_LACKS_SYSV_SHMEM */
+/**
+ * @class ACE_Local_Memory_Pool_Options
+ *
+ * @brief Helper class for Local Memory Pool constructor options.
+ *
+ * This should be a nested class, but that breaks too many
+ * compilers.
+ */
class ACE_Export ACE_Local_Memory_Pool_Options
{
- // = TITLE
- // Helper class for Local Memory Pool constructor options.
- //
- // = DESCRIPTION
- // This should be a nested class, but that breaks too many
- // compilers.
};
+/**
+ * @class ACE_Local_Memory_Pool
+ *
+ * @brief Make a memory pool that is based on C++ new/delete. This is
+ * useful for integrating existing components that use new/delete
+ * into the ACE Malloc scheme...
+ */
class ACE_Export ACE_Local_Memory_Pool
{
- // = TITLE
- // Make a memory pool that is based on C++ new/delete. This is
- // useful for integrating existing components that use new/delete
- // into the ACE Malloc scheme...
public:
typedef ACE_Local_Memory_Pool_Options OPTIONS;
+ /// Initialize the pool.
ACE_Local_Memory_Pool (const ACE_TCHAR *backing_store_name = 0,
const OPTIONS *options = 0);
- // Initialize the pool.
virtual ~ACE_Local_Memory_Pool (void);
+ /// Ask system for initial chunk of local memory.
virtual void *init_acquire (size_t nbytes,
size_t &rounded_bytes,
int &first_time);
- // Ask system for initial chunk of local memory.
+ /// Acquire at least NBYTES from the memory pool. ROUNDED_BYTES is
+ /// the actual number of bytes allocated.
virtual void *acquire (size_t nbytes,
size_t &rounded_bytes);
- // Acquire at least NBYTES from the memory pool. ROUNDED_BYTES is
- // the actual number of bytes allocated.
+ /// Instruct the memory pool to release all of its resources.
virtual int release (void);
- // Instruct the memory pool to release all of its resources.
+ /**
+ * Sync <len> bytes of the memory region to the backing store
+ * starting at <this->base_addr_>. If <len> == -1 then sync the
+ * whole region.
+ */
virtual int sync (ssize_t len = -1, int flags = MS_SYNC);
- // Sync <len> bytes of the memory region to the backing store
- // starting at <this->base_addr_>. If <len> == -1 then sync the
- // whole region.
+ /// Sync <len> bytes of the memory region to the backing store
+ /// starting at <addr_>.
virtual int sync (void *addr, size_t len, int flags = MS_SYNC);
- // Sync <len> bytes of the memory region to the backing store
- // starting at <addr_>.
+ /**
+ * Change the protection of the pages of the mapped region to <prot>
+ * starting at <this->base_addr_> up to <len> bytes. If <len> == -1
+ * then change protection of all pages in the mapped region.
+ */
virtual int protect (ssize_t len = -1, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <this->base_addr_> up to <len> bytes. If <len> == -1
- // then change protection of all pages in the mapped region.
+ /// Change the protection of the pages of the mapped region to <prot>
+ /// starting at <addr> up to <len> bytes.
virtual int protect (void *addr, size_t len, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <addr> up to <len> bytes.
#if defined (ACE_WIN32)
+ /**
+ * Win32 Structural exception selector. The return value decides
+ * how to handle memory pool related structural exceptions. Returns
+ * 1, 0, or , -1.
+ */
virtual int seh_selector (void *);
- // Win32 Structural exception selector. The return value decides
- // how to handle memory pool related structural exceptions. Returns
- // 1, 0, or , -1.
#endif /* ACE_WIN32 */
+ /**
+ * Try to extend the virtual address space so that <addr> is now
+ * covered by the address mapping. Always returns 0 since we can't
+ * remap a local memory pool.
+ */
virtual int remap (void *addr);
- // Try to extend the virtual address space so that <addr> is now
- // covered by the address mapping. Always returns 0 since we can't
- // remap a local memory pool.
+ /// Dump the state of an object.
virtual void dump (void) const;
- // Dump the state of an object.
+ /// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
- // Declare the dynamic allocation hooks.
protected:
+ /// List of memory that we have allocated.
ACE_Unbounded_Set<char *> allocated_chunks_;
- // List of memory that we have allocated.
virtual size_t round_up (size_t nbytes);
@@ -333,14 +365,16 @@ protected:
// appropriate chunksize.
};
+/**
+ * @class ACE_MMAP_Memory_Pool_Options
+ *
+ * @brief Helper class for MMAP Memory Pool constructor options.
+ *
+ * This should be a nested class, but that breaks too many
+ * compilers.
+ */
class ACE_Export ACE_MMAP_Memory_Pool_Options
{
- // = TITLE
- // Helper class for MMAP Memory Pool constructor options.
- //
- // = DESCRIPTION
- // This should be a nested class, but that breaks too many
- // compilers.
public:
// = Initialization method.
ACE_MMAP_Memory_Pool_Options (const void *base_addr = ACE_DEFAULT_BASE_ADDR,
@@ -351,105 +385,118 @@ public:
int guess_on_fault = 1,
LPSECURITY_ATTRIBUTES sa = 0);
+ /// Base address of the memory-mapped backing store.
const void *base_addr_;
- // Base address of the memory-mapped backing store.
+ /// Must we use the <base_addr_> or can we let mmap(2) select it?
int use_fixed_addr_;
- // Must we use the <base_addr_> or can we let mmap(2) select it?
+ /// Should each page be written eagerly to avoid surprises later
+ /// on?
int write_each_page_;
- // Should each page be written eagerly to avoid surprises later
- // on?
+ /// What the minimim bytes of the initial segment should be.
off_t minimum_bytes_;
- // What the minimim bytes of the initial segment should be.
+ /// Any special flags that need to be used for <mmap>.
u_int flags_;
- // Any special flags that need to be used for <mmap>.
+ /**
+ * Try to remap without knowing the faulting address. This
+ * parameter is ignored on platforms that know the faulting address
+ * (UNIX with SI_ADDR and Win32).
+ */
int guess_on_fault_;
- // Try to remap without knowing the faulting address. This
- // parameter is ignored on platforms that know the faulting address
- // (UNIX with SI_ADDR and Win32).
+ /// Pointer to a security attributes object. Only used on NT.
LPSECURITY_ATTRIBUTES sa_;
- // Pointer to a security attributes object. Only used on NT.
};
+/**
+ * @class ACE_MMAP_Memory_Pool
+ *
+ * @brief Make a memory pool that is based on <mmap(2)>. This
+ * implementation allows memory to be shared between processes.
+ */
class ACE_Export ACE_MMAP_Memory_Pool : public ACE_Event_Handler
{
- // = TITLE
- // Make a memory pool that is based on <mmap(2)>. This
- // implementation allows memory to be shared between processes.
public:
typedef ACE_MMAP_Memory_Pool_Options OPTIONS;
// = Initialization and termination methods.
+ /// Initialize the pool.
ACE_MMAP_Memory_Pool (const ACE_TCHAR *backing_store_name = 0,
const OPTIONS *options = 0);
- // Initialize the pool.
virtual ~ACE_MMAP_Memory_Pool (void);
+ /// Ask system for initial chunk of shared memory.
virtual void *init_acquire (size_t nbytes,
size_t &rounded_bytes,
int &first_time);
- // Ask system for initial chunk of shared memory.
+ /**
+ * Acquire at least <nbytes> from the memory pool. <rounded_bytes>
+ * is the actual number of bytes allocated. Also acquires an
+ * internal semaphore that ensures proper serialization of
+ * <ACE_MMAP_Memory_Pool> initialization across processes.
+ */
virtual void *acquire (size_t nbytes,
size_t &rounded_bytes);
- // Acquire at least <nbytes> from the memory pool. <rounded_bytes>
- // is the actual number of bytes allocated. Also acquires an
- // internal semaphore that ensures proper serialization of
- // <ACE_MMAP_Memory_Pool> initialization across processes.
+ /// Instruct the memory pool to release all of its resources.
virtual int release (void);
- // Instruct the memory pool to release all of its resources.
+ /// Sync the memory region to the backing store starting at
+ /// <this->base_addr_>.
virtual int sync (ssize_t len = -1, int flags = MS_SYNC);
- // Sync the memory region to the backing store starting at
- // <this->base_addr_>.
+ /// Sync the memory region to the backing store starting at <addr_>.
virtual int sync (void *addr, size_t len, int flags = MS_SYNC);
- // Sync the memory region to the backing store starting at <addr_>.
+ /**
+ * Change the protection of the pages of the mapped region to <prot>
+ * starting at <this->base_addr_> up to <len> bytes. If <len> == -1
+ * then change protection of all pages in the mapped region.
+ */
virtual int protect (ssize_t len = -1, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <this->base_addr_> up to <len> bytes. If <len> == -1
- // then change protection of all pages in the mapped region.
+ /// Change the protection of the pages of the mapped region to <prot>
+ /// starting at <addr> up to <len> bytes.
virtual int protect (void *addr, size_t len, int prot = PROT_RDWR);
- // Change the protection of the pages of the mapped region to <prot>
- // starting at <addr> up to <len> bytes.
#if defined (ACE_WIN32)
+ /**
+ * Win32 Structural exception selector. The return value decides
+ * how to handle memory pool related structural exceptions. Returns
+ * 1, 0, or , -1.
+ */
virtual int seh_selector (void *);
- // Win32 Structural exception selector. The return value decides
- // how to handle memory pool related structural exceptions. Returns
- // 1, 0, or , -1.
#endif /* ACE_WIN32 */
+ /**
+ * Try to extend the virtual address space so that <addr> is now
+ * covered by the address mapping. The method succeeds and returns
+ * 0 if the backing store has adequate memory to cover this address.
+ * Otherwise, it returns -1. This method is typically called by a
+ * UNIX signal handler for SIGSEGV or a Win32 structured exception
+ * when another process has grown the backing store (and its
+ * mapping) and our process now incurs a fault because our mapping
+ * isn't in range (yet).
+ */
virtual int remap (void *addr);
- // Try to extend the virtual address space so that <addr> is now
- // covered by the address mapping. The method succeeds and returns
- // 0 if the backing store has adequate memory to cover this address.
- // Otherwise, it returns -1. This method is typically called by a
- // UNIX signal handler for SIGSEGV or a Win32 structured exception
- // when another process has grown the backing store (and its
- // mapping) and our process now incurs a fault because our mapping
- // isn't in range (yet).
+ /// Return the base address of this memory pool.
virtual void *base_addr (void) const;
- // Return the base address of this memory pool.
+ /// Dump the state of an object.
virtual void dump (void) const;
- // Dump the state of an object.
+ /// Declare the dynamic allocation hooks.
ACE_ALLOC_HOOK_DECLARE;
- // Declare the dynamic allocation hooks.
protected:
// = Implement the algorithm for rounding up the request to an
@@ -457,147 +504,162 @@ protected:
virtual size_t round_up (size_t nbytes);
+ /// Compute the new <map_size> of the backing store and commit the
+ /// memory.
virtual int commit_backing_store_name (size_t rounded_bytes,
off_t &map_size);
- // Compute the new <map_size> of the backing store and commit the
- // memory.
+ /// Memory map the file up to <map_size> bytes.
virtual int map_file (off_t map_size);
- // Memory map the file up to <map_size> bytes.
+ /// Handle SIGSEGV and SIGBUS signals to remap shared memory
+ /// properly.
virtual int handle_signal (int signum, siginfo_t *, ucontext_t *);
- // Handle SIGSEGV and SIGBUS signals to remap shared memory
- // properly.
+ /// Handles SIGSEGV.
ACE_Sig_Handler signal_handler_;
- // Handles SIGSEGV.
+ /// Memory-mapping object.
ACE_Mem_Map mmap_;
- // Memory-mapping object.
+ /**
+ * Base of mapped region. If this has the value of 0 then the OS is
+ * free to select any address to map the file, otherwise this value
+ * is what the OS must try to use to mmap the file.
+ */
void *base_addr_;
- // Base of mapped region. If this has the value of 0 then the OS is
- // free to select any address to map the file, otherwise this value
- // is what the OS must try to use to mmap the file.
+ /// Flags passed into <ACE_OS::mmap>.
int flags_;
- // Flags passed into <ACE_OS::mmap>.
+ /// Should we write a byte to each page to forceably allocate memory
+ /// for this backing store?
int write_each_page_;
- // Should we write a byte to each page to forceably allocate memory
- // for this backing store?
+ /// What the minimum bytes of the initial segment should be.
off_t minimum_bytes_;
- // What the minimum bytes of the initial segment should be.
+ /// Name of the backing store where the shared memory pool is kept.
ACE_TCHAR backing_store_name_[MAXPATHLEN + 1];
- // Name of the backing store where the shared memory pool is kept.
+ /**
+ * Try to remap without knowing the faulting address. This
+ * parameter is ignored on platforms that know the faulting address
+ * (UNIX with SI_ADDR and Win32).
+ */
int guess_on_fault_;
- // Try to remap without knowing the faulting address. This
- // parameter is ignored on platforms that know the faulting address
- // (UNIX with SI_ADDR and Win32).
+ /// Security attributes object, only used on NT.
LPSECURITY_ATTRIBUTES sa_;
- // Security attributes object, only used on NT.
};
+/**
+ * @class ACE_Lite_MMAP_Memory_Pool
+ *
+ * @brief Make a ``lighter-weight'' memory pool based <ACE_Mem_Map>.
+ *
+ * This implementation allows memory to be shared between
+ * processes. However, unlike the <ACE_MMAP_Memory_Pool>
+ * the <sync> methods are no-ops, which means that we don't pay
+ * for the price of flushing the memory to the backing store on
+ * every update. Naturally, this trades off increased
+ * performance for less reliability if the machine crashes.
+ */
class ACE_Export ACE_Lite_MMAP_Memory_Pool : public ACE_MMAP_Memory_Pool
{
- // = TITLE
- // Make a ``lighter-weight'' memory pool based <ACE_Mem_Map>.
- //
- // = DESCRIPTION
- // This implementation allows memory to be shared between
- // processes. However, unlike the <ACE_MMAP_Memory_Pool>
- // the <sync> methods are no-ops, which means that we don't pay
- // for the price of flushing the memory to the backing store on
- // every update. Naturally, this trades off increased
- // performance for less reliability if the machine crashes.
public:
// = Initialization and termination methods.
+ /// Initialize the pool.
ACE_Lite_MMAP_Memory_Pool (const ACE_TCHAR *backing_store_name = 0,
const OPTIONS *options = 0);
- // Initialize the pool.
virtual ~ACE_Lite_MMAP_Memory_Pool (void);
+ /// Overwrite the default sync behavior with no-op
virtual int sync (ssize_t len = -1, int flags = MS_SYNC);
- // Overwrite the default sync behavior with no-op
+ /// Overwrite the default sync behavior with no-op
virtual int sync (void *addr, size_t len, int flags = MS_SYNC);
- // Overwrite the default sync behavior with no-op
};
#if defined (ACE_WIN32)
+/**
+ * @class ACE_Pagefile_Memory_Pool_Options
+ *
+ * @brief Helper class for Pagefile Memory Pool constructor options.
+ *
+ * This should be a nested class, but that breaks too many
+ * compilers.
+ */
class ACE_Export ACE_Pagefile_Memory_Pool_Options
{
- // = TITLE
- // Helper class for Pagefile Memory Pool constructor options.
- //
- // = DESCRIPTION
- // This should be a nested class, but that breaks too many
- // compilers.
public:
// Initialization method.
ACE_Pagefile_Memory_Pool_Options (void *base_addr = ACE_DEFAULT_PAGEFILE_POOL_BASE,
size_t max_size = ACE_DEFAULT_PAGEFILE_POOL_SIZE);
+ /// Base address of the memory-mapped backing store.
void *base_addr_;
- // Base address of the memory-mapped backing store.
+ /// Maximum size the pool may grow.
size_t max_size_;
- // Maximum size the pool may grow.
};
+/**
+ * @class ACE_Pagefile_Memory_Pool
+ *
+ * @brief Make a memory pool that is based on "anonymous" memory
+ * regions allocated from the Win32 page file.
+ */
class ACE_Export ACE_Pagefile_Memory_Pool
{
- // = TITLE
- // Make a memory pool that is based on "anonymous" memory
- // regions allocated from the Win32 page file.
public:
typedef ACE_Pagefile_Memory_Pool_Options OPTIONS;
+ /// Initialize the pool.
ACE_Pagefile_Memory_Pool (const ACE_TCHAR *backing_store_name = 0,
const OPTIONS *options = 0);
- // Initialize the pool.
+ /// Ask system for initial chunk of shared memory.
void *init_acquire (size_t nbytes,
size_t &rounded_bytes,
int &first_time);
- // Ask system for initial chunk of shared memory.
+ /// Acquire at least <nbytes> from the memory pool. <rounded_bytes>
+ /// is the actual number of bytes allocated.
void *acquire (size_t nbytes,
size_t &rounded_bytes);
- // Acquire at least <nbytes> from the memory pool. <rounded_bytes>
- // is the actual number of bytes allocated.
+ /// Instruct the memory pool to release all of its resources.
int release (void);
- // Instruct the memory pool to release all of its resources.
+ /**
+ * Win32 Structural exception selector. The return value decides
+ * how to handle memory pool related structural exceptions. Returns
+ * 1, 0, or , -1.
+ */
virtual int seh_selector (void *);
- // Win32 Structural exception selector. The return value decides
- // how to handle memory pool related structural exceptions. Returns
- // 1, 0, or , -1.
+ /**
+ * Try to extend the virtual address space so that <addr> is now
+ * covered by the address mapping. The method succeeds and returns
+ * 0 if the backing store has adequate memory to cover this address.
+ * Otherwise, it returns -1. This method is typically called by an
+ * exception handler for a Win32 structured exception when another
+ * process has grown the backing store (and its mapping) and our
+ * process now incurs a fault because our mapping isn't in range
+ * (yet).
+ */
int remap (void *addr);
- // Try to extend the virtual address space so that <addr> is now
- // covered by the address mapping. The method succeeds and returns
- // 0 if the backing store has adequate memory to cover this address.
- // Otherwise, it returns -1. This method is typically called by an
- // exception handler for a Win32 structured exception when another
- // process has grown the backing store (and its mapping) and our
- // process now incurs a fault because our mapping isn't in range
- // (yet).
+ /// Round up to system page size.
size_t round_to_page_size (size_t nbytes);
- // Round up to system page size.
+ /// Round up to the chunk size required by the operation system
size_t round_to_chunk_size (size_t nbytes);
- // Round up to the chunk size required by the operation system
// = Don't need this methods here ...
int sync (ssize_t = -1, int = MS_SYNC);
@@ -608,43 +670,51 @@ public:
protected:
+ /**
+ * Map portions or the entire pool into the local virtual address
+ * space. To do this, we compute the new <file_offset> of the
+ * backing store and commit the memory.
+ */
int map (int &firstTime, int appendBytes = 0);
- // Map portions or the entire pool into the local virtual address
- // space. To do this, we compute the new <file_offset> of the
- // backing store and commit the memory.
+ /// Release the mapping.
int unmap (void);
- // Release the mapping.
private:
+ /**
+ * @class Control_Block
+ *
+ * @brief Attributes that are meaningful in local storage only.
+ */
class Control_Block
{
- // = TITLE
- // Attributes that are meaningful in local storage only.
public:
+ /// required base address
void *req_base_;
- // required base address
+ /// Base address returned from system call
void *mapped_base_;
- // Base address returned from system call
+ /**
+ * @class Shared_Control_Block
+ *
+ * @brief Pool statistics
+ */
class Shared_Control_Block
{
- // = TITLE
- // Pool statistics
public:
+ /// Maximum size the pool may grow
size_t max_size_;
- // Maximum size the pool may grow
+ /// Size of mapped shared memory segment
int mapped_size_;
- // Size of mapped shared memory segment
+ /// Offset to mapped but not yet acquired address space
int free_offset_;
- // Offset to mapped but not yet acquired address space
+ /// Size of mapped but not yet acquired address space
int free_size_;
- // Size of mapped but not yet acquired address space
};
Shared_Control_Block sh_;
@@ -654,20 +724,20 @@ private:
// free to select any address to map the file, otherwise this value
// is what the OS must try to use to mmap the file.
+ /// Description of what our process mapped.
Control_Block local_cb_;
- // Description of what our process mapped.
+ /// Shared memory pool statistics.
Control_Block *shared_cb_;
- // Shared memory pool statistics.
+ /// File mapping handle.
ACE_HANDLE object_handle_;
- // File mapping handle.
+ /// System page size.
size_t page_size_;
- // System page size.
+ /// Name of the backing store where the shared memory pool is kept.
ACE_TCHAR backing_store_name_[MAXPATHLEN];
- // Name of the backing store where the shared memory pool is kept.
};
#endif /* ACE_WIN32 */