aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/status_line.c
diff options
context:
space:
mode:
authorLibravatar Luke Drummond <ldrumm@rtps.co>2020-06-11 01:29:07 +0100
committerLibravatar Simon Ser <contact@emersion.fr>2020-06-12 14:45:40 +0200
commitc22caa54a8b40e152b141c18d32f3bad383d9d1c (patch)
tree3cfe6163f09beb36adbf6c84e371c43ecec6a577 /swaybar/status_line.c
parentLog Sway version on startup (diff)
downloadsway-c22caa54a8b40e152b141c18d32f3bad383d9d1c.tar.gz
sway-c22caa54a8b40e152b141c18d32f3bad383d9d1c.tar.zst
sway-c22caa54a8b40e152b141c18d32f3bad383d9d1c.zip
swaybar: ensure correct init order for status_line
`$WAYLAND_SOCKET` is unset by `wl_display_connect` after it has successfully connected to the wayland socket. However, subprocesses spawned by swaybar (status-command) don't have access to waybar's fds as $WAYLAND_SOCKET is O_CLOEXEC. This means any status command which itself tries to connect to wayland will fail if this environment variable is set. Reorder display and status-command initialization so that this variable is not set and add an assert so we can enforce this invariant in future.
Diffstat (limited to 'swaybar/status_line.c')
-rw-r--r--swaybar/status_line.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/swaybar/status_line.c b/swaybar/status_line.c
index fb9271f8..71ceb1d0 100644
--- a/swaybar/status_line.c
+++ b/swaybar/status_line.c
@@ -1,4 +1,5 @@
1#define _POSIX_C_SOURCE 200809L 1#define _POSIX_C_SOURCE 200809L
2#include <assert.h>
2#include <fcntl.h> 3#include <fcntl.h>
3#include <sys/ioctl.h> 4#include <sys/ioctl.h>
4#include <json.h> 5#include <json.h>
@@ -153,6 +154,8 @@ struct status_line *status_line_init(char *cmd) {
153 exit(1); 154 exit(1);
154 } 155 }
155 156
157 assert(!getenv("WAYLAND_SOCKET") && "display must be initialized before "
158 " starting `status-command`; WAYLAND_SOCKET should not be set");
156 status->pid = fork(); 159 status->pid = fork();
157 if (status->pid == 0) { 160 if (status->pid == 0) {
158 dup2(pipe_read_fd[1], STDOUT_FILENO); 161 dup2(pipe_read_fd[1], STDOUT_FILENO);