summaryrefslogtreecommitdiff
path: root/common/JackShmMem.h
diff options
context:
space:
mode:
authorsletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2007-01-25 22:47:25 +0000
committersletz <sletz@0c269be4-1314-0410-8aa9-9f06e86f4224>2007-01-25 22:47:25 +0000
commit0b91ecdd83a42772b1d910ade3023b2f413d5300 (patch)
tree5691f525dbb6c21a7e430db4ffda9be3bbf17a33 /common/JackShmMem.h
parentb4c3ecace907ab6c8141a9a2983f9f83072fb329 (diff)
downloadjack2-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.h57
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);
+ }
};