Browse Source

Use placement new for dynamic port allocation (in progress).

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2284 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
40d7e43d8e
4 changed files with 14 additions and 3 deletions
  1. +2
    -2
      common/JackGraphManager.h
  2. +5
    -1
      common/JackServer.cpp
  3. +6
    -0
      common/JackShmMem.cpp
  4. +1
    -0
      common/JackShmMem.h

+ 2
- 2
common/JackGraphManager.h View File

@@ -33,13 +33,13 @@ namespace Jack
/*! /*!
\brief Graph manager: contains the connection manager and the port array. \brief Graph manager: contains the connection manager and the port array.
*/ */
class JackGraphManager : public JackShmMem, public JackAtomicState<JackConnectionManager> class JackGraphManager : public JackShmMem, public JackAtomicState<JackConnectionManager>
{ {


private: private:


JackPort fPortArray[PORT_NUM];
JackPort fPortArray[];
JackClientTiming fClientTiming[CLIENT_NUM]; JackClientTiming fClientTiming[CLIENT_NUM];


jack_port_id_t AllocatePortAux(int refnum, const char* port_name, const char* port_type, JackPortFlags flags); jack_port_id_t AllocatePortAux(int refnum, const char* port_name, const char* port_type, JackPortFlags flags);


+ 5
- 1
common/JackServer.cpp View File

@@ -47,7 +47,11 @@ JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long pr
JackGlobals::InitServer(); JackGlobals::InitServer();
for (int i = 0; i < CLIENT_NUM; i++) for (int i = 0; i < CLIENT_NUM; i++)
fSynchroTable[i] = JackGlobals::MakeSynchro(); fSynchroTable[i] = JackGlobals::MakeSynchro();
fGraphManager = new JackGraphManager();
// Use "placement" new for graph manager
void* shared_mem = JackShmMem::operator new(PORT_NUM * 1*sizeof(JackPort) + sizeof(JackGraphManager));
fGraphManager = new(shared_mem) JackGraphManager();
fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name); fEngineControl = new JackEngineControl(sync, temporary, timeout, rt, priority, verbose, server_name);
fEngine = new JackLockedEngine(new JackEngine(fGraphManager, fSynchroTable, fEngineControl)); fEngine = new JackLockedEngine(new JackEngine(fGraphManager, fSynchroTable, fEngineControl));
fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable)); fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable));


+ 6
- 0
common/JackShmMem.cpp View File

@@ -28,6 +28,12 @@ namespace Jack
unsigned int JackShmMem::fSegmentNum = 0; unsigned int JackShmMem::fSegmentNum = 0;
jack_shm_info_t JackShmMem::gInfo; jack_shm_info_t JackShmMem::gInfo;
size_t JackMem::gSize = 0; size_t JackMem::gSize = 0;
void* JackShmMem::operator new(size_t size, void* memory)
{
jack_log("JackShmMem::new placement size = %ld", size);
return memory;
}


void* JackShmMem::operator new(size_t size) void* JackShmMem::operator new(size_t size)
{ {


+ 1
- 0
common/JackShmMem.h View File

@@ -105,6 +105,7 @@ class JackShmMem
public: public:


void* operator new(size_t size); void* operator new(size_t size);
void* operator new(size_t size, void* memory);
void operator delete(void* p, size_t size); void operator delete(void* p, size_t size);


JackShmMem() JackShmMem()


Loading…
Cancel
Save