Fix a nasty dualcore hang in EFB read (see r3658 comment...)

Also fix an issue reported by baby.lueshi (issue 1074) in nJoy related to half press button being always pressed when unset.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3661 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
sl1nk3.s
2009-07-03 15:35:31 +00:00
parent 06b65ea425
commit 936225eee4
4 changed files with 34 additions and 32 deletions

View File

@ -102,7 +102,7 @@ static bool s_PluginInitialized = false;
static volatile u32 s_AccessEFBResult = 0, s_EFBx, s_EFBy;
static volatile EFBAccessType s_AccessEFBType;
static Common::Event s_AccessEFBDone;
static Common::CriticalSection s_criticalEFB, s_criticalAccess;
static Common::CriticalSection s_criticalEFB;
void GetDllInfo (PLUGIN_INFO* _PluginInfo)
@ -519,7 +519,8 @@ void Video_OnThreadAccessEFB()
default:
break;
}
g_EFBAccessRequested = false;
s_AccessEFBDone.Set();
s_criticalEFB.Leave();
@ -529,8 +530,6 @@ u32 Video_AccessEFB(EFBAccessType type, u32 x, u32 y)
{
u32 result;
s_criticalAccess.Enter();
s_criticalEFB.Enter();
s_AccessEFBType = type;
@ -540,7 +539,7 @@ u32 Video_AccessEFB(EFBAccessType type, u32 x, u32 y)
if (g_VideoInitialize.bUseDualCore)
{
s_AccessEFBDone.Init();
g_EFBAccessRequested = true;
g_EFBAccessRequested = true;
}
s_criticalEFB.Leave();
@ -556,9 +555,8 @@ u32 Video_AccessEFB(EFBAccessType type, u32 x, u32 y)
s_AccessEFBDone.Shutdown();
result = s_AccessEFBResult;
s_criticalEFB.Leave();
s_criticalAccess.Leave();
s_criticalEFB.Leave();
return result;
}