mirror of
https://github.com/systemd/systemd.git
synced 2024-12-25 01:34:28 +03:00
logind: fix closing of button input devices
This is a fix of #17751. Specifically: 1. Sort #include headers again 2. Remove tabs, as per coding style 3. Don't install fds in half-initialized objects 4. Use asynchronous_close() everywhere That all said: Quit frankly, I am not convinced we should do all this at all. If close()ing of these input devices is really that slow, then this should probably be fixed in the kernel, not worked around in userspace like this.
This commit is contained in:
parent
1d9aa4d572
commit
c74d5fe25d
@ -8,12 +8,12 @@
|
||||
#include "sd-messages.h"
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "async.h"
|
||||
#include "fd-util.h"
|
||||
#include "logind-button.h"
|
||||
#include "missing_input.h"
|
||||
#include "string-util.h"
|
||||
#include "util.h"
|
||||
#include "async.h"
|
||||
|
||||
#define CONST_MAX5(a, b, c, d, e) CONST_MAX(CONST_MAX(a, b), CONST_MAX(CONST_MAX(c, d), e))
|
||||
|
||||
@ -60,11 +60,7 @@ void button_free(Button *b) {
|
||||
sd_event_source_unref(b->io_event_source);
|
||||
sd_event_source_unref(b->check_event_source);
|
||||
|
||||
if (b->fd >= 0)
|
||||
/* If the device has been unplugged close() returns
|
||||
* ENODEV, let's ignore this, hence we don't use
|
||||
* safe_close() */
|
||||
(void) asynchronous_close(b->fd);
|
||||
asynchronous_close(b->fd);
|
||||
|
||||
free(b->name);
|
||||
free(b->seat);
|
||||
@ -327,14 +323,14 @@ static int button_set_mask(const char *name, int fd) {
|
||||
}
|
||||
|
||||
int button_open(Button *b) {
|
||||
_cleanup_close_ int fd = -1;
|
||||
_cleanup_(asynchronous_closep) int fd = -1;
|
||||
const char *p;
|
||||
char name[256];
|
||||
int r;
|
||||
|
||||
assert(b);
|
||||
|
||||
b->fd = safe_close(b->fd);
|
||||
b->fd = asynchronous_close(b->fd);
|
||||
|
||||
p = strjoina("/dev/input/", b->name);
|
||||
|
||||
@ -345,12 +341,10 @@ int button_open(Button *b) {
|
||||
r = button_suitable(fd);
|
||||
if (r < 0)
|
||||
return log_warning_errno(r, "Failed to determine whether input device %s is relevant to us: %m", p);
|
||||
if (r == 0) {
|
||||
b->fd = TAKE_FD(fd);
|
||||
if (r == 0)
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(EADDRNOTAVAIL),
|
||||
"Device %s does not expose keys or switches relevant to us, ignoring.", p);
|
||||
}
|
||||
|
||||
|
||||
if (ioctl(fd, EVIOCGNAME(sizeof name), name) < 0)
|
||||
return log_error_errno(errno, "Failed to get input name for %s: %m", p);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user