aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--swayidle/main.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/swayidle/main.c b/swayidle/main.c
index 9a76e58c..41eecc41 100644
--- 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);
}