commit bd59602711b7a68ee996539b267b379b7518766c
parent 688f4137a573d87f591c86edafdaf7c0f4d0aee4
Author: emersion <contact@emersion.fr>
Date: Mon, 7 Jan 2019 13:34:04 +0100
Merge pull request #3381 from oscarwcl/swayidle-inhibit-sleep
swayidle: Fix sleep inhibitor not being acquired
Diffstat:
1 file changed, 13 insertions(+), 0 deletions(-)
diff --git a/swayidle/main.c b/swayidle/main.c
@@ -1,6 +1,7 @@
#define _POSIX_C_SOURCE 200809L
#include <assert.h>
#include <errno.h>
+#include <fcntl.h>
#include <getopt.h>
#include <pthread.h>
#include <signal.h>
@@ -104,9 +105,21 @@ static void acquire_sleep_lock(void) {
if (ret < 0) {
wlr_log(WLR_ERROR, "Failed to parse D-Bus response for Inhibit: %s",
strerror(-ret));
+ sd_bus_error_free(&error);
+ sd_bus_message_unref(msg);
+ return;
} else {
wlr_log(WLR_INFO, "Got sleep lock: %d", lock_fd);
}
+
+ // sd_bus_message_unref closes the file descriptor so we need
+ // to copy it beforehand
+ lock_fd = fcntl(lock_fd, F_DUPFD_CLOEXEC, 3);
+ if (lock_fd < 0) {
+ wlr_log(WLR_ERROR, "Failed to copy sleep lock fd: %s",
+ strerror(errno));
+ }
+
sd_bus_error_free(&error);
sd_bus_message_unref(msg);
}