diff options
author | Daniel Stone <daniels@collabora.com> | 2022-07-21 17:15:18 +0100 |
---|---|---|
committer | Pekka Paalanen <pq@iki.fi> | 2023-04-19 08:28:21 +0000 |
commit | 4e6a978e342361da4c9adecf5c1de3ad41a718de (patch) | |
tree | 7056471542ba86dee9d6b282c37fc43fb84184b4 | |
parent | c0a75ee379b2f46a267e3051ab79c36f37e81f36 (diff) | |
download | weston-4e6a978e342361da4c9adecf5c1de3ad41a718de.tar.gz |
xwayland: Don't leak fds on failure
Trivial fixup to not leak socketpairs if we need to exit early in the
function.
Signed-off-by: Daniel Stone <daniels@collabora.com>
-rw-r--r-- | compositor/xwayland.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compositor/xwayland.c b/compositor/xwayland.c index 322a9782..42df8cb9 100644 --- a/compositor/xwayland.c +++ b/compositor/xwayland.c @@ -120,13 +120,13 @@ spawn_xserver(void *user_data, const char *display, int abstract_fd, int unix_fd if (os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, x11_wm_socket.fds) < 0) { weston_log("X wm connection socketpair failed\n"); - return 1; + goto err_wayland_socket; } fdstr_update_str1(&x11_wm_socket); if (pipe2(display_pipe.fds, O_CLOEXEC) < 0) { weston_log("pipe creation for displayfd failed\n"); - return 1; + goto err_x11_wm_socket; } fdstr_update_str1(&display_pipe); @@ -217,6 +217,12 @@ spawn_xserver(void *user_data, const char *display, int abstract_fd, int unix_fd free(xserver); return pid; + +err_x11_wm_socket: + fdstr_close_all(&x11_wm_socket); +err_wayland_socket: + fdstr_close_all(&wayland_socket); + return -1; } static void |