From 26bd8479d0fe165d9afbc84a1680ad43209d9058 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 14 May 2020 21:40:43 +0200 Subject: [PATCH] ipc: make --input-ipc-client terminate player on connection close As discussed in the referenced issue. This is quite a behavior change, bit since this option is new, and not included in any releases yet, I think it's OK. Fixes: #7648 --- DOCS/man/options.rst | 2 ++ input/ipc-unix.c | 10 +++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index 431837e26a..8118ea6ab0 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -3760,6 +3760,8 @@ Input In both cases, you must sure the FD is actually inherited by mpv (do not set the POSIX ``CLOEXEC`` flag). + The player quits when the connection is closed. + This is somewhat similar to the removed ``--input-file`` option, except it supports only integer FDs, and cannot open actual paths. diff --git a/input/ipc-unix.c b/input/ipc-unix.c index ef9f26e5c0..b237efa1a0 100644 --- a/input/ipc-unix.c +++ b/input/ipc-unix.c @@ -61,6 +61,7 @@ struct client_arg { const char *client_name; int client_fd; bool close_client_fd; + bool quit_on_close; bool writable; }; @@ -210,8 +211,14 @@ done: talloc_free(client_msg.start); if (arg->close_client_fd) close(arg->client_fd); - mpv_destroy(arg->client); + struct mpv_handle *h = arg->client; + bool quit = arg->quit_on_close; talloc_free(arg); + if (quit) { + mpv_terminate_destroy(h); + } else { + mpv_destroy(h); + } return NULL; } @@ -252,6 +259,7 @@ static void ipc_start_client_json(struct mp_ipc_ctx *ctx, int id, int fd) id >= 0 ? talloc_asprintf(client, "ipc-%d", id) : "ipc", .client_fd = fd, .close_client_fd = id >= 0, + .quit_on_close = id < 0, .writable = true, };