diff --git a/swayidle/main.c b/swayidle/main.c index 9a76e58c1..41eecc41a 100644 --- a/swayidle/main.c +++ b/swayidle/main.c @@ -1,6 +1,7 @@ #define _POSIX_C_SOURCE 200809L #include #include +#include #include #include #include @@ -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); }