Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions FEXCore/Source/Utils/Allocator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,27 @@
#include <cstdint>
#include <cstdio>
#include <fcntl.h>
#include <mutex>

#ifndef _WIN32
#include <sys/mman.h>
#include <sys/user.h>
#endif

namespace fextl::pmr {
static fextl::pmr::default_resource FEXDefaultResource;
static std::once_flag default_resource_initialized {};
static fextl::pmr::default_resource* FEXDefaultResource {};
alignas(alignof(fextl::pmr::default_resource)) static char FEXDefaultResourcePlacement[sizeof(fextl::pmr::default_resource)];
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FTR same point as in the other related PRs applies here, pending discussion over there.


std::pmr::memory_resource* get_default_resource() {
return &FEXDefaultResource;
// This dance is necessary to avoid an atexit allocator call.
if (FEXDefaultResource) {
return FEXDefaultResource;
}

std::call_once(default_resource_initialized,
[]() { FEXDefaultResource = new (FEXDefaultResourcePlacement) fextl::pmr::default_resource {}; });
return FEXDefaultResource;
}
} // namespace fextl::pmr

Expand Down
Loading