mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-06 15:01:18 +12:00
Make controller button code thread-safe (#405)
* Refactor spinlock to meet Lockable requirements * Input: Refactor button code and make it thread-safe
This commit is contained in:
parent
c40466f3a8
commit
028b3f7992
28 changed files with 311 additions and 220 deletions
|
@ -516,16 +516,16 @@ FSpinlock s_spinlockFetchShaderCache;
|
|||
|
||||
LatteFetchShader* LatteFetchShader::RegisterInCache(CacheHash fsHash)
|
||||
{
|
||||
s_spinlockFetchShaderCache.acquire();
|
||||
s_spinlockFetchShaderCache.lock();
|
||||
auto itr = s_fetchShaderByHash.find(fsHash);
|
||||
if (itr != s_fetchShaderByHash.end())
|
||||
{
|
||||
LatteFetchShader* fs = itr->second;
|
||||
s_spinlockFetchShaderCache.release();
|
||||
s_spinlockFetchShaderCache.unlock();
|
||||
return fs;
|
||||
}
|
||||
s_fetchShaderByHash.emplace(fsHash, this);
|
||||
s_spinlockFetchShaderCache.release();
|
||||
s_spinlockFetchShaderCache.unlock();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -533,11 +533,11 @@ void LatteFetchShader::UnregisterInCache()
|
|||
{
|
||||
if (!m_isRegistered)
|
||||
return;
|
||||
s_spinlockFetchShaderCache.acquire();
|
||||
s_spinlockFetchShaderCache.lock();
|
||||
auto itr = s_fetchShaderByHash.find(m_cacheHash);
|
||||
cemu_assert(itr == s_fetchShaderByHash.end());
|
||||
s_fetchShaderByHash.erase(itr);
|
||||
s_spinlockFetchShaderCache.release();
|
||||
s_spinlockFetchShaderCache.unlock();
|
||||
}
|
||||
|
||||
std::unordered_map<LatteFetchShader::CacheHash, LatteFetchShader*> LatteFetchShader::s_fetchShaderByHash;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue