Revert "xwayland: Don't dup() displayfd pipe"
This reverts commit 4aa885d4af
.
Turns out the problem was not about dupping fds at all, but calling
non-async-signal-safe functions like strdup() between fork() and exec()
in the child process.
For more discussion, see:
https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/941#note_1457053
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
parent
ff94ba33cd
commit
e88a622434
@ -135,6 +135,11 @@ spawn_xserver(void *user_data, const char *display, int abstract_fd, int unix_fd
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (os_fd_set_cloexec(display_fd[1]) != 0) {
|
||||||
|
weston_log("failed setting Xwayland end of displayfd as cloexec\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
pid = fork();
|
pid = fork();
|
||||||
switch (pid) {
|
switch (pid) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -149,16 +154,12 @@ spawn_xserver(void *user_data, const char *display, int abstract_fd, int unix_fd
|
|||||||
ret &= dup_fd_to_string(abstract_fd_str, abstract_fd);
|
ret &= dup_fd_to_string(abstract_fd_str, abstract_fd);
|
||||||
ret &= dup_fd_to_string(unix_fd_str, unix_fd);
|
ret &= dup_fd_to_string(unix_fd_str, unix_fd);
|
||||||
ret &= dup_fd_to_string(wm_fd_str, wm[1]);
|
ret &= dup_fd_to_string(wm_fd_str, wm[1]);
|
||||||
|
ret &= dup_fd_to_string(display_fd_str, display_fd[1]);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
_exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
|
|
||||||
setenv("WAYLAND_SOCKET", wayland_socket_str, 1);
|
setenv("WAYLAND_SOCKET", wayland_socket_str, 1);
|
||||||
|
|
||||||
if (snprintf(display_fd_str, sizeof(display_fd_str), "%d",
|
|
||||||
display_fd[1]) <= 0) {
|
|
||||||
_exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (execl(xserver,
|
if (execl(xserver,
|
||||||
xserver,
|
xserver,
|
||||||
display,
|
display,
|
||||||
|
Loading…
Reference in New Issue
Block a user