mirror of
https://github.com/Relintai/sdl2_frt.git
synced 2024-12-25 09:17:12 +01:00
Fixed bug 4391 - hid_enumerate() sometimes causes game to freeze for a few seconds
Daniel Gibson Even though my game (dhewm3) doesn't use SDL_INIT_JOYSTICK, SDL_PumpEvent() calls SDL_JoystickUpdate() which ends up calling hid_enumerate() every three seconds, and sometimes on my Win7 box hid_enumerate() takes about 5 seconds, which causes the whole game to freeze for that time.
This commit is contained in:
parent
d3fa42b8c4
commit
b73703b9c6
@ -101,6 +101,15 @@ SDL_MostSignificantBitIndex32(Uint32 x)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_FORCE_INLINE SDL_bool
|
||||||
|
SDL_HasExactlyOneBitSet32(Uint32 x)
|
||||||
|
{
|
||||||
|
if (x && !(x & (x - 1))) {
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
return SDL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Ends C function definitions when using C++ */
|
/* Ends C function definitions when using C++ */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -348,6 +348,12 @@ SDL_WasInit(Uint32 flags)
|
|||||||
int num_subsystems = SDL_arraysize(SDL_SubsystemRefCount);
|
int num_subsystems = SDL_arraysize(SDL_SubsystemRefCount);
|
||||||
Uint32 initialized = 0;
|
Uint32 initialized = 0;
|
||||||
|
|
||||||
|
/* Fast path for checking one flag */
|
||||||
|
if (SDL_HasExactlyOneBitSet32(flags)) {
|
||||||
|
int subsystem_index = SDL_MostSignificantBitIndex32(flags);
|
||||||
|
return SDL_SubsystemRefCount[subsystem_index] ? flags : 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (!flags) {
|
if (!flags) {
|
||||||
flags = SDL_INIT_EVERYTHING;
|
flags = SDL_INIT_EVERYTHING;
|
||||||
}
|
}
|
||||||
|
@ -1016,6 +1016,10 @@ SDL_JoystickUpdate(void)
|
|||||||
int i;
|
int i;
|
||||||
SDL_Joystick *joystick;
|
SDL_Joystick *joystick;
|
||||||
|
|
||||||
|
if (!SDL_WasInit(SDL_INIT_JOYSTICK)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_LockJoysticks();
|
SDL_LockJoysticks();
|
||||||
|
|
||||||
if (SDL_updating_joystick) {
|
if (SDL_updating_joystick) {
|
||||||
|
@ -505,6 +505,10 @@ SDL_SensorUpdate(void)
|
|||||||
int i;
|
int i;
|
||||||
SDL_Sensor *sensor;
|
SDL_Sensor *sensor;
|
||||||
|
|
||||||
|
if (!SDL_WasInit(SDL_INIT_SENSOR)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_LockSensors();
|
SDL_LockSensors();
|
||||||
|
|
||||||
if (SDL_updating_sensor) {
|
if (SDL_updating_sensor) {
|
||||||
|
Loading…
Reference in New Issue
Block a user