mirror of https://github.com/snes9xgit/snes9x.git
Mac: Replace os_unfair_lock with pthread_mutex_t, since os_unfair_lock is crashong on at least one computer
This commit is contained in:
parent
92645c8ab1
commit
402fa9aed6
|
@ -18,9 +18,10 @@
|
||||||
(c) Copyright 2019 Michael Donald Buckley
|
(c) Copyright 2019 Michael Donald Buckley
|
||||||
***********************************************************************************/
|
***********************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#include "port.h"
|
#include "port.h"
|
||||||
|
|
||||||
#include <IOKit/hid/IOHIDDevice.h>
|
#include <IOKit/hid/IOHIDDevice.h>
|
||||||
|
@ -112,14 +113,14 @@ std::string NameForDevice(struct JoypadDevice device) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void gamepadAction(void *inContext, IOReturn inResult, void *inSender, IOHIDValueRef v) {
|
void gamepadAction(void *inContext, IOReturn inResult, void *inSender, IOHIDValueRef v) {
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
|
|
||||||
IOHIDDeviceRef device = (IOHIDDeviceRef) inSender;
|
IOHIDDeviceRef device = (IOHIDDeviceRef) inSender;
|
||||||
uint32 port = ((NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDLocationIDKey))).unsignedIntValue;
|
uint32 port = ((NSNumber *)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDLocationIDKey))).unsignedIntValue;
|
||||||
|
|
||||||
if (deviceIndexByPort.find(port) == deviceIndexByPort.end())
|
if (deviceIndexByPort.find(port) == deviceIndexByPort.end())
|
||||||
{
|
{
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,20 +136,20 @@ void gamepadAction(void *inContext, IOReturn inResult, void *inSender, IOHIDValu
|
||||||
|
|
||||||
if (allDevices.find(deviceStruct) == allDevices.end())
|
if (allDevices.find(deviceStruct) == allDevices.end())
|
||||||
{
|
{
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( playerNumByDevice.find(deviceStruct) == playerNumByDevice.end())
|
if ( playerNumByDevice.find(deviceStruct) == playerNumByDevice.end())
|
||||||
{
|
{
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int8 playerNum = playerNumByDevice[deviceStruct];
|
int8 playerNum = playerNumByDevice[deviceStruct];
|
||||||
if (playerNum < 0 || playerNum >= MAC_MAX_PLAYERS)
|
if (playerNum < 0 || playerNum >= MAC_MAX_PLAYERS)
|
||||||
{
|
{
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,7 +174,7 @@ void gamepadAction(void *inContext, IOReturn inResult, void *inSender, IOHIDValu
|
||||||
objcInput.cookie = inputStruct.cookie.cookie;
|
objcInput.cookie = inputStruct.cookie.cookie;
|
||||||
objcInput.value =inputStruct.value;
|
objcInput.value =inputStruct.value;
|
||||||
|
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
if (info.min != info.max)
|
if (info.min != info.max)
|
||||||
{
|
{
|
||||||
if (inputStruct.value <= info.min || inputStruct.value >= info.max)
|
if (inputStruct.value <= info.min || inputStruct.value >= info.max)
|
||||||
|
@ -191,7 +192,7 @@ void gamepadAction(void *inContext, IOReturn inResult, void *inSender, IOHIDValu
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
|
|
||||||
struct JoypadInput oppositeInputStruct = inputStruct;
|
struct JoypadInput oppositeInputStruct = inputStruct;
|
||||||
|
|
||||||
|
@ -265,7 +266,7 @@ void gamepadAction(void *inContext, IOReturn inResult, void *inSender, IOHIDValu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void findControls(struct JoypadDevice &device, NSDictionary *properties, NSMutableArray<NSDictionary *> *buttons, NSMutableArray<NSDictionary *> *axes, int64 *hat)
|
void findControls(struct JoypadDevice &device, NSDictionary *properties, NSMutableArray<NSDictionary *> *buttons, NSMutableArray<NSDictionary *> *axes, int64 *hat)
|
||||||
|
|
|
@ -165,7 +165,7 @@ extern IconRef macIconRef[118];
|
||||||
|
|
||||||
extern bool8 pressedKeys[MAC_MAX_PLAYERS][kNumButtons];
|
extern bool8 pressedKeys[MAC_MAX_PLAYERS][kNumButtons];
|
||||||
extern bool8 pressedGamepadButtons[MAC_MAX_PLAYERS][kNumButtons];
|
extern bool8 pressedGamepadButtons[MAC_MAX_PLAYERS][kNumButtons];
|
||||||
extern os_unfair_lock keyLock;
|
extern pthread_mutex_t keyLock;
|
||||||
|
|
||||||
extern NSOpenGLView *s9xView;
|
extern NSOpenGLView *s9xView;
|
||||||
|
|
||||||
|
|
|
@ -231,8 +231,8 @@ bool8 pressedGamepadButtons[MAC_MAX_PLAYERS][kNumButtons] = { 0 };
|
||||||
bool8 pressedFunctionButtons[kNumFunctionButtons] = { 0 };
|
bool8 pressedFunctionButtons[kNumFunctionButtons] = { 0 };
|
||||||
bool8 pressedRawKeyboardButtons[MAC_NUM_KEYCODES] = { 0 };
|
bool8 pressedRawKeyboardButtons[MAC_NUM_KEYCODES] = { 0 };
|
||||||
bool8 heldFunctionButtons[kNumFunctionButtons] = { 0 };
|
bool8 heldFunctionButtons[kNumFunctionButtons] = { 0 };
|
||||||
os_unfair_lock keyLock;
|
pthread_mutex_t keyLock;
|
||||||
os_unfair_lock renderLock;
|
pthread_mutex_t renderLock;
|
||||||
|
|
||||||
NSOpenGLView *s9xView;
|
NSOpenGLView *s9xView;
|
||||||
|
|
||||||
|
@ -350,10 +350,10 @@ static void * MacSnes9xThread (void *)
|
||||||
|
|
||||||
void CopyPressedKeys(bool8 keys[MAC_MAX_PLAYERS][kNumButtons], bool8 gamepadButtons[MAC_MAX_PLAYERS][kNumButtons])
|
void CopyPressedKeys(bool8 keys[MAC_MAX_PLAYERS][kNumButtons], bool8 gamepadButtons[MAC_MAX_PLAYERS][kNumButtons])
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
memcpy(keys, pressedKeys, sizeof(pressedKeys));
|
memcpy(keys, pressedKeys, sizeof(pressedKeys));
|
||||||
memcpy(gamepadButtons, pressedGamepadButtons, sizeof(pressedGamepadButtons));
|
memcpy(gamepadButtons, pressedGamepadButtons, sizeof(pressedGamepadButtons));
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void EmulationLoop (void)
|
static inline void EmulationLoop (void)
|
||||||
|
@ -413,9 +413,9 @@ static inline void EmulationLoop (void)
|
||||||
|
|
||||||
if (!pauseEmulation)
|
if (!pauseEmulation)
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&renderLock);
|
pthread_mutex_lock(&renderLock);
|
||||||
S9xMainLoop();
|
S9xMainLoop();
|
||||||
os_unfair_lock_unlock(&renderLock);
|
pthread_mutex_unlock(&renderLock);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -424,9 +424,9 @@ static inline void EmulationLoop (void)
|
||||||
macFrameSkip = 1;
|
macFrameSkip = 1;
|
||||||
skipFrames = 1;
|
skipFrames = 1;
|
||||||
frameAdvance = false;
|
frameAdvance = false;
|
||||||
os_unfair_lock_lock(&renderLock);
|
pthread_mutex_lock(&renderLock);
|
||||||
S9xMainLoop();
|
S9xMainLoop();
|
||||||
os_unfair_lock_unlock(&renderLock);
|
pthread_mutex_unlock(&renderLock);
|
||||||
macFrameSkip = storedMacFrameSkip;
|
macFrameSkip = storedMacFrameSkip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2291,9 +2291,9 @@ static void ProcessInput (void)
|
||||||
CopyPressedKeys(keys, gamepadButtons);
|
CopyPressedKeys(keys, gamepadButtons);
|
||||||
|
|
||||||
isok = SNES9X_Freeze();
|
isok = SNES9X_Freeze();
|
||||||
os_unfair_lock_lock(&renderLock);
|
pthread_mutex_lock(&renderLock);
|
||||||
ClearGFXScreen();
|
ClearGFXScreen();
|
||||||
os_unfair_lock_unlock(&renderLock);
|
pthread_mutex_unlock(&renderLock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2304,9 +2304,9 @@ static void ProcessInput (void)
|
||||||
CopyPressedKeys(keys, gamepadButtons);
|
CopyPressedKeys(keys, gamepadButtons);
|
||||||
|
|
||||||
isok = SNES9X_Defrost();
|
isok = SNES9X_Defrost();
|
||||||
os_unfair_lock_lock(&renderLock);
|
pthread_mutex_lock(&renderLock);
|
||||||
ClearGFXScreen();
|
ClearGFXScreen();
|
||||||
os_unfair_lock_unlock(&renderLock);
|
pthread_mutex_unlock(&renderLock);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2880,8 +2880,8 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
+ (void)initialize
|
+ (void)initialize
|
||||||
{
|
{
|
||||||
keyLock = OS_UNFAIR_LOCK_INIT;
|
keyLock = PTHREAD_MUTEX_INITIALIZER;
|
||||||
renderLock = OS_UNFAIR_LOCK_INIT;
|
renderLock = PTHREAD_MUTEX_INITIALIZER;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithFrame:(NSRect)frameRect pixelFormat:(nullable NSOpenGLPixelFormat *)format
|
- (instancetype)initWithFrame:(NSRect)frameRect pixelFormat:(nullable NSOpenGLPixelFormat *)format
|
||||||
|
@ -2916,7 +2916,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
S9xButton button = keyCodes[event.keyCode];
|
S9xButton button = keyCodes[event.keyCode];
|
||||||
if ( button.buttonCode >= 0 && button.buttonCode < kNumButtons && button.player <= 0 && button.player <= MAC_MAX_PLAYERS)
|
if ( button.buttonCode >= 0 && button.buttonCode < kNumButtons && button.player <= 0 && button.player <= MAC_MAX_PLAYERS)
|
||||||
{
|
{
|
||||||
|
@ -2934,7 +2934,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
pressedRawKeyboardButtons[event.keyCode] = true;
|
pressedRawKeyboardButtons[event.keyCode] = true;
|
||||||
|
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)keyUp:(NSEvent *)event
|
- (void)keyUp:(NSEvent *)event
|
||||||
|
@ -2944,7 +2944,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
S9xButton button = keyCodes[event.keyCode];
|
S9xButton button = keyCodes[event.keyCode];
|
||||||
if ( button.buttonCode >= 0 && button.buttonCode < kNumButtons && button.player <= 0 && button.player <= MAC_MAX_PLAYERS)
|
if ( button.buttonCode >= 0 && button.buttonCode < kNumButtons && button.player <= 0 && button.player <= MAC_MAX_PLAYERS)
|
||||||
{
|
{
|
||||||
|
@ -2963,7 +2963,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
pressedRawKeyboardButtons[event.keyCode] = false;
|
pressedRawKeyboardButtons[event.keyCode] = false;
|
||||||
|
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)flagsChanged:(NSEvent *)event
|
- (void)flagsChanged:(NSEvent *)event
|
||||||
|
@ -2973,7 +2973,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
|
|
||||||
NSEventModifierFlags flags = event.modifierFlags;
|
NSEventModifierFlags flags = event.modifierFlags;
|
||||||
|
|
||||||
|
@ -3001,7 +3001,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
pressedKeys[button.player][button.buttonCode] = (flags & NSEventModifierFlagOption) != 0;
|
pressedKeys[button.player][button.buttonCode] = (flags & NSEventModifierFlagOption) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseDown:(NSEvent *)event
|
- (void)mouseDown:(NSEvent *)event
|
||||||
|
@ -3012,13 +3012,13 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
- (void)drawRect:(NSRect)dirtyRect
|
- (void)drawRect:(NSRect)dirtyRect
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&renderLock);
|
pthread_mutex_lock(&renderLock);
|
||||||
self.subviews[0].hidden = !pauseEmulation;
|
self.subviews[0].hidden = !pauseEmulation;
|
||||||
CGFloat scaleFactor = MAX(self.window.backingScaleFactor, 1.0);
|
CGFloat scaleFactor = MAX(self.window.backingScaleFactor, 1.0);
|
||||||
glScreenW = self.frame.size.width * scaleFactor;
|
glScreenW = self.frame.size.width * scaleFactor;
|
||||||
glScreenH = self.frame.size.height * scaleFactor;
|
glScreenH = self.frame.size.height * scaleFactor;
|
||||||
S9xPutImage(IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight);
|
S9xPutImage(IPPU.RenderedScreenWidth, IPPU.RenderedScreenHeight);
|
||||||
os_unfair_lock_unlock(&renderLock);
|
pthread_mutex_unlock(&renderLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setFrame:(NSRect)frame
|
- (void)setFrame:(NSRect)frame
|
||||||
|
@ -3089,9 +3089,9 @@ void QuitWithFatalError ( NSString *message)
|
||||||
skipFrames = macFrameSkip;
|
skipFrames = macFrameSkip;
|
||||||
|
|
||||||
S9xInitDisplay(NULL, NULL);
|
S9xInitDisplay(NULL, NULL);
|
||||||
os_unfair_lock_lock(&renderLock);
|
pthread_mutex_lock(&renderLock);
|
||||||
ClearGFXScreen();
|
ClearGFXScreen();
|
||||||
os_unfair_lock_unlock(&renderLock);
|
pthread_mutex_unlock(&renderLock);
|
||||||
|
|
||||||
[NSThread detachNewThreadWithBlock:^
|
[NSThread detachNewThreadWithBlock:^
|
||||||
{
|
{
|
||||||
|
@ -3157,7 +3157,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
- (NSArray<S9xJoypad *> *)listJoypads
|
- (NSArray<S9xJoypad *> *)listJoypads
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
NSMutableArray<S9xJoypad *> *joypads = [NSMutableArray new];
|
NSMutableArray<S9xJoypad *> *joypads = [NSMutableArray new];
|
||||||
for (auto joypadStruct : ListJoypads())
|
for (auto joypadStruct : ListJoypads())
|
||||||
{
|
{
|
||||||
|
@ -3191,44 +3191,44 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}];
|
}];
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
|
|
||||||
return joypads;
|
return joypads;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setPlayer:(int8)player forVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index oldPlayer:(int8 *)oldPlayer
|
- (void)setPlayer:(int8)player forVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index oldPlayer:(int8 *)oldPlayer
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
SetPlayerForJoypad(player, vendorID, productID, index, oldPlayer);
|
SetPlayerForJoypad(player, vendorID, productID, index, oldPlayer);
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)setButton:(S9xButtonCode)button forVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index cookie:(uint32)cookie value:(int32)value oldButton:(S9xButtonCode *)oldButton
|
- (BOOL)setButton:(S9xButtonCode)button forVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index cookie:(uint32)cookie value:(int32)value oldButton:(S9xButtonCode *)oldButton
|
||||||
{
|
{
|
||||||
BOOL result = NO;
|
BOOL result = NO;
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
result = SetButtonCodeForJoypadControl(vendorID, productID, index, cookie, value, button, true, oldButton);
|
result = SetButtonCodeForJoypadControl(vendorID, productID, index, cookie, value, button, true, oldButton);
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)clearJoypadForVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index
|
- (void)clearJoypadForVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
ClearJoypad(vendorID, productID, index);
|
ClearJoypad(vendorID, productID, index);
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)clearJoypadForVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index buttonCode:(S9xButtonCode)buttonCode
|
- (void)clearJoypadForVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index buttonCode:(S9xButtonCode)buttonCode
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
ClearButtonCodeForJoypad(vendorID, productID, index, buttonCode);
|
ClearButtonCodeForJoypad(vendorID, productID, index, buttonCode);
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSArray<S9xJoypadInput *> *)getInputsForVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index
|
- (NSArray<S9xJoypadInput *> *)getInputsForVendorID:(uint32)vendorID productID:(uint32)productID index:(uint32)index
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
NSMutableArray<S9xJoypadInput *> *inputs = [NSMutableArray new];
|
NSMutableArray<S9xJoypadInput *> *inputs = [NSMutableArray new];
|
||||||
std::unordered_map<struct JoypadInput, S9xButtonCode> buttonCodeMap = GetJuypadButtons(vendorID, productID, index);
|
std::unordered_map<struct JoypadInput, S9xButtonCode> buttonCodeMap = GetJuypadButtons(vendorID, productID, index);
|
||||||
for (auto it = buttonCodeMap.begin(); it != buttonCodeMap.end(); ++it)
|
for (auto it = buttonCodeMap.begin(); it != buttonCodeMap.end(); ++it)
|
||||||
|
@ -3240,7 +3240,7 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
[inputs addObject:input];
|
[inputs addObject:input];
|
||||||
}
|
}
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
|
|
||||||
return inputs;
|
return inputs;
|
||||||
}
|
}
|
||||||
|
@ -3253,17 +3253,17 @@ void QuitWithFatalError ( NSString *message)
|
||||||
- (BOOL)setButton:(S9xButtonCode)button forKey:(int16)key player:(int8)player oldButton:(S9xButtonCode *)oldButton oldPlayer:(int8 *)oldPlayer oldKey:(int16 *)oldKey
|
- (BOOL)setButton:(S9xButtonCode)button forKey:(int16)key player:(int8)player oldButton:(S9xButtonCode *)oldButton oldPlayer:(int8 *)oldPlayer oldKey:(int16 *)oldKey
|
||||||
{
|
{
|
||||||
BOOL result = NO;
|
BOOL result = NO;
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
result = SetKeyCode(key, button, player, oldKey, oldButton, oldPlayer);
|
result = SetKeyCode(key, button, player, oldKey, oldButton, oldPlayer);
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)clearButton:(S9xButtonCode)button forPlayer:(int8)player
|
- (void)clearButton:(S9xButtonCode)button forPlayer:(int8)player
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&keyLock);
|
pthread_mutex_lock(&keyLock);
|
||||||
ClearKeyCode(button, player);
|
ClearKeyCode(button, player);
|
||||||
os_unfair_lock_unlock(&keyLock);
|
pthread_mutex_unlock(&keyLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)loadROM:(NSURL *)fileURL
|
- (BOOL)loadROM:(NSURL *)fileURL
|
||||||
|
@ -3287,9 +3287,9 @@ void QuitWithFatalError ( NSString *message)
|
||||||
|
|
||||||
- (void)setVideoMode:(int)mode
|
- (void)setVideoMode:(int)mode
|
||||||
{
|
{
|
||||||
os_unfair_lock_lock(&renderLock);
|
pthread_mutex_lock(&renderLock);
|
||||||
videoMode = mode;
|
videoMode = mode;
|
||||||
os_unfair_lock_unlock(&renderLock);
|
pthread_mutex_unlock(&renderLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@dynamic inputDelegate;
|
@dynamic inputDelegate;
|
||||||
|
|
Loading…
Reference in New Issue