From 82bab57e98ad690ee8301eff516e600254b1731a Mon Sep 17 00:00:00 2001 From: Julian Hinxlage Date: Thu, 21 Nov 2019 13:03:53 +0100 Subject: [PATCH] ~ segfault bug fix on getPixel --- src/SharedMemoryAccess.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) 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 {