logind: don't hit an assert if an close() on an input device fd fails with ENODEV because the device is gone

https://bugzilla.redhat.com/show_bug.cgi?id=907890
This commit is contained in:
Lennart Poettering 2013-03-07 16:48:14 +01:00
parent dec49d88d6
commit c30a0c62fd

View file

@ -71,7 +71,11 @@ void button_free(Button *b) {
if (b->fd >= 0) {
hashmap_remove(b->manager->button_fds, INT_TO_PTR(b->fd + 1));
assert_se(epoll_ctl(b->manager->epoll_fd, EPOLL_CTL_DEL, b->fd, NULL) == 0);
close_nointr_nofail(b->fd);
/* If the device has been unplugged close() returns
* ENODEV, let's ignore this, hence we don't use
* close_nointr_nofail() */
close(b->fd);
}
free(b->name);
@ -103,7 +107,7 @@ int button_open(Button *b) {
assert(b);
if (b->fd >= 0) {
close_nointr_nofail(b->fd);
close(b->fd);
b->fd = -1;
}
@ -146,7 +150,7 @@ int button_open(Button *b) {
return 0;
fail:
close_nointr_nofail(b->fd);
close(b->fd);
b->fd = -1;
return r;
}