diff --git a/src/SharedMemoryAccess.cpp b/src/SharedMemoryAccess.cpp index 697b5b0..9ea7ba2 100644 --- a/src/SharedMemoryAccess.cpp +++ b/src/SharedMemoryAccess.cpp @@ -60,18 +60,26 @@ namespace vkvm { unlockSharedMemory(); } + char *getLocalMemory(){ + if (localSharedMemory.empty()) { + constexpr int kilo = 1024; + localSharedMemory.resize(impl.sharedMemorySize); + } + return &localSharedMemory[0]; + } + auto getSharedMemory() -> char * { int shmId = shmget(impl.sharedMemoryKey, 0, 0); if (shmId < 0) { //using a local buffer for shared memory testing - if (localSharedMemory.empty()) { - initSemaphore(); - constexpr int kilo = 1024; - localSharedMemory.resize(impl.sharedMemorySize * kilo); - } - return &localSharedMemory[0]; + return getLocalMemory(); + } + char *ptr = static_cast(shmat(shmId, nullptr, 0)); + if((size_t)ptr == (size_t)-1){ + return getLocalMemory(); + }else{ + return ptr; } - return static_cast(shmat(shmId, nullptr, 0)); } auto getSharedMemory(char *address, int size, int offset) -> void {