From 28d648b80278161e21e370e326be4de4a8645340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Wed, 11 Oct 2017 17:17:25 +0200 Subject: [PATCH] MemArena: Use names that are based on the PID Fixes a regression which broke running several Dolphin instances at the same time on Windows. Thanks to exjam for spotting the issue pretty much immediately. Sorry about that! Also changes the file names to be more consistent on all platforms. --- Source/Core/Common/MemArena.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) 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