From 14c232bdbfbb16f427632d579430fa1a522f7f73 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 21 Sep 2016 15:55:34 +0200 Subject: client API: fix init/destruction race conditions mp_new_client() blatantly accessed some mutex-protected state outside of the mutex. The destruction code is in theory OK, but with changes in the following commits it'll be a bit hard to guarantee that it stays this way. Add a simple flag that makes adding new clients impossible, so that having no clients after shutdown_clients() remains guaranteed. --- player/main.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'player/main.c') diff --git a/player/main.c b/player/main.c index b4371ed1fa..c3488fc60c 100644 --- a/player/main.c +++ b/player/main.c @@ -152,20 +152,20 @@ void mp_print_version(struct mp_log *log, int always) static void shutdown_clients(struct MPContext *mpctx) { - while (mpctx->clients && mp_clients_num(mpctx)) { + mp_client_enter_shutdown(mpctx); + while (mp_clients_num(mpctx)) { mp_client_broadcast_event(mpctx, MPV_EVENT_SHUTDOWN, NULL); - mp_dispatch_queue_process(mpctx->dispatch, 0); mp_wait_events(mpctx); } } void mp_destroy(struct MPContext *mpctx) { + shutdown_clients(mpctx); + mp_uninit_ipc(mpctx->ipc_ctx); mpctx->ipc_ctx = NULL; - shutdown_clients(mpctx); - uninit_audio_out(mpctx); uninit_video_out(mpctx); -- cgit v1.2.3