mirror of https://github.com/PCSX2/pcsx2.git
onepad: Don't try to acquire the lock when it wasn't initialized. Avoid
the freezing of the window when a plugin failed to open. git-svn-id: http://pcsx2.googlecode.com/svn/trunk@5660 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
c94ee5e4ce
commit
8ec0275a96
|
@ -121,6 +121,7 @@ int ds2mode = 0; // DS Mode at start
|
||||||
FILE *padLog = NULL;
|
FILE *padLog = NULL;
|
||||||
|
|
||||||
pthread_spinlock_t mutex_KeyEvent;
|
pthread_spinlock_t mutex_KeyEvent;
|
||||||
|
bool mutex_WasInit = false;
|
||||||
KeyStatus* key_status = NULL;
|
KeyStatus* key_status = NULL;
|
||||||
|
|
||||||
queue<keyEvent> ev_fifo;
|
queue<keyEvent> ev_fifo;
|
||||||
|
@ -277,6 +278,7 @@ EXPORT_C_(s32) PADopen(void *pDsp)
|
||||||
|
|
||||||
while (!ev_fifo.empty()) ev_fifo.pop();
|
while (!ev_fifo.empty()) ev_fifo.pop();
|
||||||
pthread_spin_init(&mutex_KeyEvent, PTHREAD_PROCESS_PRIVATE);
|
pthread_spin_init(&mutex_KeyEvent, PTHREAD_PROCESS_PRIVATE);
|
||||||
|
mutex_WasInit = true;
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
JoystickInfo::EnumerateJoysticks(s_vjoysticks);
|
JoystickInfo::EnumerateJoysticks(s_vjoysticks);
|
||||||
|
@ -303,6 +305,7 @@ EXPORT_C_(void) PADsetLogDir(const char* dir)
|
||||||
EXPORT_C_(void) PADclose()
|
EXPORT_C_(void) PADclose()
|
||||||
{
|
{
|
||||||
while (!ev_fifo.empty()) ev_fifo.pop();
|
while (!ev_fifo.empty()) ev_fifo.pop();
|
||||||
|
mutex_WasInit = false;
|
||||||
pthread_spin_destroy(&mutex_KeyEvent);
|
pthread_spin_destroy(&mutex_KeyEvent);
|
||||||
_PADclose();
|
_PADclose();
|
||||||
}
|
}
|
||||||
|
@ -666,8 +669,12 @@ EXPORT_C_(keyEvent*) PADkeyEvent()
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
EXPORT_C_(void) PADWriteEvent(keyEvent &evt)
|
EXPORT_C_(void) PADWriteEvent(keyEvent &evt)
|
||||||
{
|
{
|
||||||
|
// This function call be called before PADopen. Therefore we cann't
|
||||||
|
// guarantee that the spin lock was initialized
|
||||||
|
if (mutex_WasInit) {
|
||||||
pthread_spin_lock(&mutex_KeyEvent);
|
pthread_spin_lock(&mutex_KeyEvent);
|
||||||
ev_fifo.push(evt);
|
ev_fifo.push(evt);
|
||||||
pthread_spin_unlock(&mutex_KeyEvent);
|
pthread_spin_unlock(&mutex_KeyEvent);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue