Merge pull request #14940 from BunnyFl/fix/prime-shared-mutexes

fix(agc,libkernel): prime the host shared mutexes left unprimed on Windows
This commit is contained in:
Dean authored and GitHub committed 2026-11-03 18:12:18 +13:00
commit 5f96abbcba
5 files changed
+21 -11

No files matched your search

@@ -6,6 +6,7 @@
#endif
#include <mutex>
#include <vulkan/vulkan.h>
#include "prx/libc/include/PrimedSharedMutex.hpp"
#include <array>
#include <atomic>
#include <cstdint>
@@ -47,7 +48,7 @@ public:
SnapshotLock TryLockForSnapshot() const { return SnapshotLock(mutex, std::try_to_lock); }
private:
mutable std::shared_mutex mutex;
mutable PrimedSharedMutex mutex;
};
inline void Require(bool condition, const std::string& reason) {
@@ -2,6 +2,7 @@
#include "prx/libSceAgcDriver/Graphics/include/DepthSurface.hpp"
#include "prx/libSceAgcDriver/Execution/include/GuestMemory.hpp"
#include "prx/libc/include/GuestAllocations.hpp"
#include "prx/libc/include/PrimedSharedMutex.hpp"
#include "prx/libSceAgcDriver/Graphics/include/BufferPool.hpp"
#include "prx/libSceAgcDriver/Graphics/include/FirstSampleCopy.hpp"
#include "prx/libSceAgcDriver/Graphics/include/Recorder.hpp"
@@ -85,7 +86,7 @@ struct DepthGuard {
};
std::shared_mutex& depthGuardMutex() {
static std::shared_mutex mutex;
static PrimedSharedMutex mutex;
return mutex;
}
@@ -17,6 +17,7 @@
#include "IntermediateRepresentation/IrMetadata/BufferFormat.hpp"
#include "prx/libSceAgcDriver/Execution/include/GuestMemory.hpp"
#include "prx/libc/include/GuestAllocations.hpp"
#include "prx/libc/include/PrimedSharedMutex.hpp"
#include <algorithm>
#include <array>
#include <atomic>
@@ -887,14 +888,6 @@ struct GuardedRange {
bool fmask = false;
};
class PrimedSharedMutex : public std::shared_mutex {
public:
PrimedSharedMutex() {
lock();
unlock();
}
};
std::shared_mutex& guardedMutex() {
static PrimedSharedMutex mutex;
return mutex;
@@ -0,0 +1,14 @@
#ifndef CORE_LIBS_PRX_LIBC_INCLUDE_PRIMEDSHAREDMUTEX_HPP
#define CORE_LIBS_PRX_LIBC_INCLUDE_PRIMEDSHAREDMUTEX_HPP
#include <shared_mutex>
class PrimedSharedMutex : public std::shared_mutex {
public:
PrimedSharedMutex() {
lock();
unlock();
}
};
#endif
@@ -4,6 +4,7 @@
#include <atomic>
#include "SceTypes.hpp"
#include "prx/libc/include/General.hpp"
#include "prx/libc/include/PrimedSharedMutex.hpp"
#include "prx/libkernel/Time/include/Time.hpp"
#include "prx/libkernel/Time/include/TimedWait.hpp"
#include <chrono>
@@ -97,7 +98,7 @@ struct EventFlagHandle {
bool opened = false;
};
std::shared_mutex eventFlagRegistryMutex;
PrimedSharedMutex eventFlagRegistryMutex;
std::unordered_map<KernelEventFlag, std::shared_ptr<EventFlagHandle>> eventFlagRegistry;
std::shared_ptr<EventFlagHandle> ResolveEventFlag(KernelEventFlag handle) {