diff options
author | Luke Drummond <ldrumm@rtps.co> | 2020-06-11 01:29:07 +0100 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2020-06-12 14:45:40 +0200 |
commit | c22caa54a8b40e152b141c18d32f3bad383d9d1c (patch) | |
tree | 3cfe6163f09beb36adbf6c84e371c43ecec6a577 /swaybar/status_line.c | |
parent | Log Sway version on startup (diff) | |
download | sway-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.c | 3 |
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); |