mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2025-12-20 04:20:04 +01:00
UpKbdBacklight: Fix endless loop burning 100% CPU on keyboard plugout
If an external keyboard with a backlight gets unplugged then up_kbd_backlight_event_io would constantly get called, burning 100% CPU. To make things worse, up_kbd_backlight_event_io would also constantly post DBUS events, causing gnome-shell to also become very unresponsive. This commit fixes this by returning FALSE from up_kbd_backlight_event_io on unplug. While at it also fix calling up_kbd_backlight_emit_change with a negative brightness value in other error scenarios. Specifically this fixes calling up_kbd_backlight_emit_change with -1 on the initial up_kbd_backlight_event_io call in which case up_kbd_backlight_brightness_read will typically fail with ENODATA.
This commit is contained in:
parent
d15e95f785
commit
04ee9afb58
1 changed files with 6 additions and 1 deletions
|
|
@ -31,6 +31,7 @@
|
|||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "up-kbd-backlight.h"
|
||||
#include "up-daemon.h"
|
||||
|
|
@ -220,6 +221,10 @@ up_kbd_backlight_event_io (GIOChannel *channel, GIOCondition condition, gpointer
|
|||
return FALSE;
|
||||
|
||||
brightness = up_kbd_backlight_brightness_read (kbd_backlight, kbd_backlight->priv->fd_hw_changed);
|
||||
if (brightness < 0 && errno == ENODEV)
|
||||
return FALSE;
|
||||
|
||||
if (brightness >= 0)
|
||||
up_kbd_backlight_emit_change (kbd_backlight, brightness, "internal");
|
||||
|
||||
return TRUE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue