Fix crash on macOS (AS) when dualshock4 is removed
(cherry picked from commit 283e31a3e2
)
This commit is contained in:
parent
0a519fed25
commit
e2cf151560
2 changed files with 11 additions and 8 deletions
|
@ -66,6 +66,7 @@ void joypad::free() {
|
||||||
if (ff_device) {
|
if (ff_device) {
|
||||||
FFDeviceReleaseEffect(ff_device, ff_object);
|
FFDeviceReleaseEffect(ff_device, ff_object);
|
||||||
FFReleaseDevice(ff_device);
|
FFReleaseDevice(ff_device);
|
||||||
|
ff_device = nullptr;
|
||||||
memfree(ff_axes);
|
memfree(ff_axes);
|
||||||
memfree(ff_directions);
|
memfree(ff_directions);
|
||||||
}
|
}
|
||||||
|
@ -250,7 +251,7 @@ void JoypadOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) {
|
||||||
if (is_joypad(p_device)) {
|
if (is_joypad(p_device)) {
|
||||||
configure_joypad(p_device, &new_joypad);
|
configure_joypad(p_device, &new_joypad);
|
||||||
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
|
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
|
||||||
if (IOHIDDeviceGetService != NULL) {
|
if (IOHIDDeviceGetService) {
|
||||||
#endif
|
#endif
|
||||||
const io_service_t ioservice = IOHIDDeviceGetService(p_device);
|
const io_service_t ioservice = IOHIDDeviceGetService(p_device);
|
||||||
if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joypad.config_force_feedback(ioservice)) {
|
if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joypad.config_force_feedback(ioservice)) {
|
||||||
|
@ -355,6 +356,7 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad *p_joy) {
|
||||||
{ \
|
{ \
|
||||||
if (ret != FF_OK) { \
|
if (ret != FF_OK) { \
|
||||||
FFReleaseDevice(ff_device); \
|
FFReleaseDevice(ff_device); \
|
||||||
|
ff_device = nullptr; \
|
||||||
return false; \
|
return false; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
@ -374,6 +376,7 @@ bool joypad::config_force_feedback(io_service_t p_service) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
FFReleaseDevice(ff_device);
|
FFReleaseDevice(ff_device);
|
||||||
|
ff_device = nullptr;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#undef FF_ERR
|
#undef FF_ERR
|
||||||
|
@ -608,7 +611,7 @@ JoypadOSX::JoypadOSX() {
|
||||||
|
|
||||||
if (array) {
|
if (array) {
|
||||||
hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
|
hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
|
||||||
if (hid_manager != NULL) {
|
if (hid_manager) {
|
||||||
config_hid_manager(array);
|
config_hid_manager(array);
|
||||||
}
|
}
|
||||||
CFRelease(array);
|
CFRelease(array);
|
||||||
|
|
|
@ -66,14 +66,14 @@ struct joypad {
|
||||||
int id = 0;
|
int id = 0;
|
||||||
bool offset_hat = false;
|
bool offset_hat = false;
|
||||||
|
|
||||||
io_service_t ffservice; /* Interface for force feedback, 0 = no ff */
|
io_service_t ffservice = 0; /* Interface for force feedback, 0 = no ff */
|
||||||
FFCONSTANTFORCE ff_constant_force;
|
FFCONSTANTFORCE ff_constant_force;
|
||||||
FFDeviceObjectReference ff_device;
|
FFDeviceObjectReference ff_device = nullptr;
|
||||||
FFEffectObjectReference ff_object;
|
FFEffectObjectReference ff_object = nullptr;
|
||||||
uint64_t ff_timestamp;
|
uint64_t ff_timestamp = 0;
|
||||||
LONG *ff_directions;
|
LONG *ff_directions = nullptr;
|
||||||
FFEFFECT ff_effect;
|
FFEFFECT ff_effect;
|
||||||
DWORD *ff_axes;
|
DWORD *ff_axes = nullptr;
|
||||||
|
|
||||||
void add_hid_elements(CFArrayRef p_array);
|
void add_hid_elements(CFArrayRef p_array);
|
||||||
void add_hid_element(IOHIDElementRef p_element);
|
void add_hid_element(IOHIDElementRef p_element);
|
||||||
|
|
Loading…
Reference in a new issue