mirror of
https://github.com/libretro/RetroArch
synced 2025-04-09 21:45:45 +00:00
Fix hotplug regressions with udev
This commit is contained in:
parent
e8c73c6683
commit
c70526b7af
@ -450,13 +450,22 @@ static void udev_input_get_pointer_position(int *x, int *y)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static bool udev_input_poll_hotplug_available(struct udev_monitor *dev)
|
||||||
|
{
|
||||||
|
struct pollfd fds;
|
||||||
|
|
||||||
|
fds.fd = udev_monitor_get_fd(dev);
|
||||||
|
fds.events = POLLIN;
|
||||||
|
fds.revents = 0;
|
||||||
|
|
||||||
|
return (poll(&fds, 1, 0) == 1) && (fds.revents & POLLIN);
|
||||||
|
}
|
||||||
|
|
||||||
static void udev_input_poll(void *data)
|
static void udev_input_poll(void *data)
|
||||||
{
|
{
|
||||||
int i, ret;
|
int i, ret;
|
||||||
struct pollfd fds;
|
|
||||||
struct epoll_event events[32];
|
struct epoll_event events[32];
|
||||||
udev_input_mouse_t *mouse = NULL;
|
udev_input_mouse_t *mouse = NULL;
|
||||||
bool hotplug_avail = false;
|
|
||||||
int x = 0;
|
int x = 0;
|
||||||
int y = 0;
|
int y = 0;
|
||||||
udev_input_t *udev = (udev_input_t*)data;
|
udev_input_t *udev = (udev_input_t*)data;
|
||||||
@ -485,12 +494,7 @@ static void udev_input_poll(void *data)
|
|||||||
mouse->whd = false;
|
mouse->whd = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fds.fd = udev_monitor_get_fd(udev->monitor);
|
while (udev->monitor && udev_input_poll_hotplug_available(udev->monitor))
|
||||||
fds.events = POLLIN;
|
|
||||||
fds.revents = 0;
|
|
||||||
hotplug_avail = (poll(&fds, 1, 0) == 1) && (fds.revents & POLLIN);
|
|
||||||
|
|
||||||
while (udev->monitor && hotplug_avail)
|
|
||||||
udev_input_handle_hotplug(udev);
|
udev_input_handle_hotplug(udev);
|
||||||
|
|
||||||
ret = epoll_wait(udev->epfd, events, ARRAY_SIZE(events), 0);
|
ret = epoll_wait(udev->epfd, events, ARRAY_SIZE(events), 0);
|
||||||
|
@ -419,18 +419,22 @@ static bool udev_set_rumble(unsigned i,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool udev_joypad_poll_hotplug_available(struct udev_monitor *dev)
|
||||||
|
{
|
||||||
|
struct pollfd fds;
|
||||||
|
|
||||||
|
fds.fd = udev_monitor_get_fd(dev);
|
||||||
|
fds.events = POLLIN;
|
||||||
|
fds.revents = 0;
|
||||||
|
|
||||||
|
return (poll(&fds, 1, 0) == 1) && (fds.revents & POLLIN);
|
||||||
|
}
|
||||||
|
|
||||||
static void udev_joypad_poll(void)
|
static void udev_joypad_poll(void)
|
||||||
{
|
{
|
||||||
unsigned p;
|
unsigned p;
|
||||||
struct pollfd fds;
|
|
||||||
bool hotplug_avail = false;
|
|
||||||
|
|
||||||
fds.fd = udev_monitor_get_fd(udev_joypad_mon);
|
while (udev_joypad_mon && udev_joypad_poll_hotplug_available(udev_joypad_mon))
|
||||||
fds.events = POLLIN;
|
|
||||||
fds.revents = 0;
|
|
||||||
hotplug_avail = (poll(&fds, 1, 0) == 1) && (fds.revents & POLLIN);
|
|
||||||
|
|
||||||
while (udev_joypad_mon && hotplug_avail)
|
|
||||||
{
|
{
|
||||||
struct udev_device *dev = udev_monitor_receive_device(udev_joypad_mon);
|
struct udev_device *dev = udev_monitor_receive_device(udev_joypad_mon);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user