diff --git a/common/JackGraphManager.h b/common/JackGraphManager.h index e2732acd..7e5337ae 100644 --- a/common/JackGraphManager.h +++ b/common/JackGraphManager.h @@ -33,13 +33,13 @@ namespace Jack /*! \brief Graph manager: contains the connection manager and the port array. */ - + class JackGraphManager : public JackShmMem, public JackAtomicState { private: - JackPort fPortArray[PORT_NUM]; + JackPort fPortArray[]; JackClientTiming fClientTiming[CLIENT_NUM]; jack_port_id_t AllocatePortAux(int refnum, const char* port_name, const char* port_type, JackPortFlags flags); diff --git a/common/JackServer.cpp b/common/JackServer.cpp index 65c217a5..d316cfb3 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -47,7 +47,11 @@ JackServer::JackServer(bool sync, bool temporary, long timeout, bool rt, long pr JackGlobals::InitServer(); for (int i = 0; i < CLIENT_NUM; i++) 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); fEngine = new JackLockedEngine(new JackEngine(fGraphManager, fSynchroTable, fEngineControl)); fFreewheelDriver = new JackThreadedDriver(new JackFreewheelDriver("freewheel", fEngine, fSynchroTable)); diff --git a/common/JackShmMem.cpp b/common/JackShmMem.cpp index 45be8ac9..56e838f5 100644 --- a/common/JackShmMem.cpp +++ b/common/JackShmMem.cpp @@ -28,6 +28,12 @@ namespace Jack unsigned int JackShmMem::fSegmentNum = 0; jack_shm_info_t JackShmMem::gInfo; 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) { diff --git a/common/JackShmMem.h b/common/JackShmMem.h index 087d887c..76fe7f0c 100644 --- a/common/JackShmMem.h +++ b/common/JackShmMem.h @@ -105,6 +105,7 @@ class JackShmMem public: void* operator new(size_t size); + void* operator new(size_t size, void* memory); void operator delete(void* p, size_t size); JackShmMem()