Lock joysticks when removing a controller on the WGI thread

This commit is contained in:
Sam Lantinga 2022-09-08 13:59:25 -07:00
parent 12413ab31f
commit a3900a751e
1 changed files with 11 additions and 0 deletions

View File

@ -401,6 +401,14 @@ static HRESULT STDMETHODCALLTYPE IEventHandler_CRawGameControllerVtbl_InvokeRemo
HRESULT hr;
__x_ABI_CWindows_CGaming_CInput_CIRawGameController *controller = NULL;
SDL_LockJoysticks();
/* Can we get delayed calls to InvokeRemoved() after WGI_JoystickQuit()? */
if (SDL_JoysticksQuitting() || !SDL_JoysticksInitialized()) {
SDL_UnlockJoysticks();
return S_OK;
}
hr = __x_ABI_CWindows_CGaming_CInput_CIRawGameController_QueryInterface(e, &IID_IRawGameController, (void **)&controller);
if (SUCCEEDED(hr)) {
int i;
@ -426,6 +434,9 @@ static HRESULT STDMETHODCALLTYPE IEventHandler_CRawGameControllerVtbl_InvokeRemo
__x_ABI_CWindows_CGaming_CInput_CIRawGameController_Release(controller);
}
SDL_UnlockJoysticks();
return S_OK;
}