diff --git a/Source/Core/Common/MemArena.cpp b/Source/Core/Common/MemArena.cpp index d9b3d1a37c..750a240e19 100644 --- a/Source/Core/Common/MemArena.cpp +++ b/Source/Core/Common/MemArena.cpp @@ -55,31 +55,25 @@ static int AshmemCreateFileMapping(const char* name, size_t size) void MemArena::GrabSHMSegment(size_t size) { #ifdef _WIN32 + const std::string name = "dolphin-emu." + std::to_string(GetCurrentProcessId()); hMemoryMapping = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, - static_cast(size), L"Dolphin-emu"); + static_cast(size), UTF8ToTStr(name).c_str()); #elif defined(ANDROID) - fd = AshmemCreateFileMapping("Dolphin-emu", size); + fd = AshmemCreateFileMapping(("dolphin-emu." + std::to_string(getpid())).c_str(), size); if (fd < 0) { NOTICE_LOG(MEMMAP, "Ashmem allocation failed"); return; } #else - for (int i = 0; i < 10000; i++) + const std::string file_name = "/dolphin-emu." + std::to_string(getpid()); + fd = shm_open(file_name.c_str(), O_RDWR | O_CREAT | O_EXCL, 0600); + if (fd == -1) { - std::string file_name = StringFromFormat("/dolphinmem.%d", i); - fd = shm_open(file_name.c_str(), O_RDWR | O_CREAT | O_EXCL, 0600); - if (fd != -1) - { - shm_unlink(file_name.c_str()); - break; - } - else if (errno != EEXIST) - { - ERROR_LOG(MEMMAP, "shm_open failed: %s", strerror(errno)); - return; - } + ERROR_LOG(MEMMAP, "shm_open failed: %s", strerror(errno)); + return; } + shm_unlink(file_name.c_str()); if (ftruncate(fd, size) < 0) ERROR_LOG(MEMMAP, "Failed to allocate low memory space"); #endif