From: Lennart Poettering Date: Thu, 7 Mar 2013 15:48:14 +0000 (+0100) Subject: logind: don't hit an assert if an close() on an input device fd fails with ENODEV... X-Git-Tag: v198~31 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;ds=sidebyside;h=c30a0c62fdbf6f11902be9db64ade99fb508adfd;hp=dec49d88d6a4febc8be0a4470183d9794b3b02b8;p=elogind.git 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 --- diff --git a/src/login/logind-button.c b/src/login/logind-button.c index cbb067aa5..ea45c28ee 100644 --- a/src/login/logind-button.c +++ b/src/login/logind-button.c @@ -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; }