Re-enable the std::mutex try_lock on linux and use it for the Host_GetKeyState keystate_lock mutex. This reduces the number of application crashes on linux during emulation.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7334 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
Glenn Rice 2011-03-12 01:19:04 +00:00
parent 1b583a0441
commit 0cc8eda124
4 changed files with 14 additions and 12 deletions

View File

@ -157,15 +157,17 @@ public:
#endif #endif
} }
#ifdef __linux__
// TryAcquireSRWLockExclusive requires Windows 7!! // TryAcquireSRWLockExclusive requires Windows 7!!
// bool try_lock() bool try_lock()
// { {
//#ifdef _WIN32 #ifdef _WIN32
// return (0 != TryAcquireSRWLockExclusive(&m_handle)); return (0 != TryAcquireSRWLockExclusive(&m_handle));
//#else #else
// return !pthread_mutex_trylock(&m_handle); return !pthread_mutex_trylock(&m_handle);
//#endif #endif
// } }
#endif
native_handle_type native_handle() native_handle_type native_handle()
{ {

View File

@ -145,7 +145,7 @@ class CFrame : public CRenderFrame
#ifdef __WXGTK__ #ifdef __WXGTK__
Common::Event panic_event; Common::Event panic_event;
bool bPanicResult; bool bPanicResult;
std::recursive_mutex keystate_lock; std::mutex keystate_lock;
#endif #endif
#if defined(HAVE_XRANDR) && HAVE_XRANDR #if defined(HAVE_XRANDR) && HAVE_XRANDR

View File

@ -1023,7 +1023,7 @@ void CFrame::DoStop()
{ {
#if defined __WXGTK__ #if defined __WXGTK__
wxMutexGuiLeave(); wxMutexGuiLeave();
std::lock_guard<std::recursive_mutex> lk(keystate_lock); std::lock_guard<std::mutex> lk(keystate_lock);
wxMutexGuiEnter(); wxMutexGuiEnter();
#endif #endif
// Ask for confirmation in case the user accidentally clicked Stop / Escape // Ask for confirmation in case the user accidentally clicked Stop / Escape

View File

@ -584,8 +584,8 @@ bool Host_GetKeyState(int keycode)
#ifdef _WIN32 #ifdef _WIN32
return GetAsyncKeyState(keycode); return GetAsyncKeyState(keycode);
#elif defined __WXGTK__ #elif defined __WXGTK__
std::unique_lock<std::recursive_mutex> lk(main_frame->keystate_lock, std::try_to_lock); std::unique_lock<std::mutex> lk(main_frame->keystate_lock, std::defer_lock);
if (!lk.owns_lock()) if (!lk.try_lock())
return false; return false;
bool key_pressed; bool key_pressed;