diff options
author | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2007-01-25 22:47:25 +0000 |
---|---|---|
committer | sletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224> | 2007-01-25 22:47:25 +0000 |
commit | 0b91ecdd83a42772b1d910ade3023b2f413d5300 (patch) | |
tree | 5691f525dbb6c21a7e430db4ffda9be3bbf17a33 /common/JackShmMem.h | |
parent | b4c3ecace907ab6c8141a9a2983f9f83072fb329 (diff) | |
download | jack2-0b91ecdd83a42772b1d910ade3023b2f413d5300.tar.gz |
Memory locking tools
git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@1366 0c269be4-1314-0410-8aa9-9f06e86f4224
Diffstat (limited to 'common/JackShmMem.h')
-rw-r--r-- | common/JackShmMem.h | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/common/JackShmMem.h b/common/JackShmMem.h index 5ebb55d0..9b51e8cc 100644 --- a/common/JackShmMem.h +++ b/common/JackShmMem.h @@ -38,7 +38,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. namespace Jack { -class JackLockMem +void LockMemoryImp(void* ptr, size_t size); +void UnlockMemoryImp(void* ptr, size_t size); + +class JackMem { private: @@ -50,7 +53,7 @@ class JackLockMem void* operator new(size_t size) { gSize = size; - return malloc(size); + return calloc(1, size); } void operator delete(void* ptr, size_t size) @@ -58,49 +61,36 @@ class JackLockMem free(ptr); } - JackLockMem():fSize(gSize) + JackMem():fSize(gSize) {} - virtual ~JackLockMem() + virtual ~JackMem() { - UnlockMemory(); + UnlockMemoryImp(this, fSize); } - void LockMemory() + void LockMemory() { - #ifdef __APPLE__ - mlock(this, fSize); - #elif linux_ - mlock(this, fSize); - #elif WIN32 - VirtualLock(this, fSize); - #endif + LockMemoryImp(this, fSize); } - void UnlockMemory() + void UnlockMemory() { - #ifdef __APPLE__ - munlock(this, fSize); - #elif linux_ - munlock(this, fSize); - #elif WIN32 - VirtualUnlock(this, fSize); - #endif + UnlockMemoryImp(this, fSize); } }; - /*! \brief The base class for shared memory management. A class which objects need to be allocated in shared memory derives from this class. */ -class JackShmMem +class JackShmMem { - private: + protected: jack_shm_info_t fInfo; static unsigned long fSegmentNum; @@ -115,11 +105,14 @@ class JackShmMem JackShmMem() { fInfo.index = gInfo.index; - fInfo.attached_at = gInfo.attached_at; - } + fInfo.attached_at = gInfo.attached_at; + fInfo.size = gInfo.size; + } virtual ~JackShmMem() - {} + { + UnlockMemoryImp(this, fInfo.size); + } int GetShmIndex() { @@ -130,6 +123,16 @@ class JackShmMem { return (char*)fInfo.attached_at; } + + void LockMemory() + { + LockMemoryImp(this, fInfo.size); + } + + void UnlockMemory() + { + UnlockMemoryImp(this, fInfo.size); + } }; |