diff --git a/Source/Core/Common/Src/MemArena.cpp b/Source/Core/Common/Src/MemArena.cpp index 6b69b63860..e7f3911e91 100644 --- a/Source/Core/Common/Src/MemArena.cpp +++ b/Source/Core/Common/Src/MemArena.cpp @@ -21,11 +21,6 @@ #endif #endif -#if defined(__APPLE__) -static const char* ram_temp_file = "/tmp/gc_mem.tmp"; -#elif !defined(_WIN32) // non OSX unixes -static const char* ram_temp_file = "/dev/shm/gc_mem.tmp"; -#endif #ifdef ANDROID #define ASHMEM_DEVICE "/dev/ashmem" @@ -62,12 +57,22 @@ void MemArena::GrabLowMemSpace(size_t size) return; } #else - mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; - fd = open(ram_temp_file, O_RDWR | O_CREAT, mode); - unlink(ram_temp_file); + char fn[64]; + for (int i = 0; i < 10000; i++) + { + sprintf(fn, "dolphinmem.%d", i); + fd = shm_open(fn, O_RDWR | O_CREAT | O_EXCL, 0600); + if (fd != -1) + break; + if (errno != EEXIST) + { + ERROR_LOG(MEMMAP, "shm_open failed: %s", strerror(errno)); + return; + } + } + shm_unlink(fn); if (ftruncate(fd, size) < 0) ERROR_LOG(MEMMAP, "Failed to allocate low memory space"); - return; #endif } @@ -96,7 +101,7 @@ void *MemArena::CreateView(s64 offset, size_t size, void *base) if (retval == MAP_FAILED) { - NOTICE_LOG(MEMMAP, "mmap on %s failed", ram_temp_file); + NOTICE_LOG(MEMMAP, "mmap failed"); return nullptr; } else diff --git a/Source/Core/DolphinWX/CMakeLists.txt b/Source/Core/DolphinWX/CMakeLists.txt index a35f1ba1ce..68728dc6fe 100644 --- a/Source/Core/DolphinWX/CMakeLists.txt +++ b/Source/Core/DolphinWX/CMakeLists.txt @@ -13,6 +13,10 @@ set(LIBS core sfml-network ${GTK2_LIBRARIES}) +if((NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")) + set(LIBS ${LIBS} rt) +endif() + if(NOT ANDROID) if(USE_X11) set(LIBS ${LIBS} ${X11_LIBRARIES}