From 7becbd7d4297c99708e984757e8fcd2233cbe1a3 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Tue, 27 Sep 2022 12:58:16 -0700
Subject: [PATCH] Add joystick locking for controller notifications on iOS/tvOS
Fixes https://github.com/libsdl-org/SDL/issues/6288
---
src/joystick/iphoneos/SDL_mfijoystick.m | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/joystick/iphoneos/SDL_mfijoystick.m b/src/joystick/iphoneos/SDL_mfijoystick.m
index 72f2ffb6380..3d21b6bfa5d 100644
--- a/src/joystick/iphoneos/SDL_mfijoystick.m
+++ b/src/joystick/iphoneos/SDL_mfijoystick.m
@@ -678,7 +678,9 @@ @interface GCMicroGamepad (SDL)
queue:nil
usingBlock:^(NSNotification *note) {
GCController *controller = note.object;
+ SDL_LockJoysticks();
IOS_AddJoystickDevice(controller, SDL_FALSE);
+ SDL_UnlockJoysticks();
}];
disconnectObserver = [center addObserverForName:GCControllerDidDisconnectNotification
@@ -686,14 +688,15 @@ @interface GCMicroGamepad (SDL)
queue:nil
usingBlock:^(NSNotification *note) {
GCController *controller = note.object;
- SDL_JoystickDeviceItem *device = deviceList;
- while (device != NULL) {
+ SDL_JoystickDeviceItem *device;
+ SDL_LockJoysticks();
+ for (device = deviceList; device != NULL; device = device->next) {
if (device->controller == controller) {
IOS_RemoveJoystickDevice(device);
break;
}
- device = device->next;
}
+ SDL_UnlockJoysticks();
}];
#endif /* SDL_JOYSTICK_MFI */
}