diff options
Diffstat (limited to 'player')
-rw-r--r-- | player/loadfile.c | 10 | ||||
-rw-r--r-- | player/scripting.c | 25 |
2 files changed, 15 insertions, 20 deletions
diff --git a/player/loadfile.c b/player/loadfile.c index 673ede1a71..8065b6f007 100644 --- a/player/loadfile.c +++ b/player/loadfile.c @@ -31,6 +31,7 @@ #include "osdep/threads.h" #include "osdep/timer.h" +#include "client.h" #include "common/msg.h" #include "common/global.h" #include "options/path.h" @@ -1519,6 +1520,15 @@ struct playlist_entry *mp_next_file(struct MPContext *mpctx, int direction, // Return if all done. void mp_play_files(struct MPContext *mpctx) { + // Wait for all scripts to load before possibly starting playback. + if (!mp_clients_all_initialized(mpctx)) { + MP_VERBOSE(mpctx, "Waiting for scripts...\n"); + while (!mp_clients_all_initialized(mpctx)) + mp_idle(mpctx); + mp_wakeup_core(mpctx); // avoid lost wakeups during waiting + MP_VERBOSE(mpctx, "Done loading scripts.\n"); + } + prepare_playlist(mpctx, mpctx->playlist); for (;;) { diff --git a/player/scripting.c b/player/scripting.c index b98588d948..bcb5ea65ef 100644 --- a/player/scripting.c +++ b/player/scripting.c @@ -100,13 +100,6 @@ static void *script_thread(void *p) return NULL; } -static void wait_loaded(struct MPContext *mpctx) -{ - while (!mp_clients_all_initialized(mpctx)) - mp_idle(mpctx); - mp_wakeup_core(mpctx); // avoid lost wakeups during waiting -} - static int mp_load_script(struct MPContext *mpctx, const char *fname) { char *ext = mp_splitext(fname, NULL); @@ -150,9 +143,6 @@ static int mp_load_script(struct MPContext *mpctx, const char *fname) return -1; } - wait_loaded(mpctx); - MP_DBG(mpctx, "Done loading %s.\n", fname); - return 0; } @@ -203,16 +193,11 @@ static void load_builtin_script(struct MPContext *mpctx, bool enable, if (enable) { mp_load_script(mpctx, fname); } else { - // Try to unload it by sending a shutdown event. Wait until it has - // terminated, or re-enabling the script could be racy (because it'd - // recognize a still-terminating script as "loaded"). - while (mp_client_exists(mpctx, name)) { - if (mp_client_send_event(mpctx, name, 0, MPV_EVENT_SHUTDOWN, - NULL) < 0) - break; - mp_idle(mpctx); - } - mp_wakeup_core(mpctx); // avoid lost wakeups during waiting + // Try to unload it by sending a shutdown event. This can be + // unreliable, because user scripts could have clashing names, or + // disabling and then quickly re-enabling a builtin script might + // detect the still-terminating script as loaded. + mp_client_send_event(mpctx, name, 0, MPV_EVENT_SHUTDOWN, NULL); } } talloc_free(tmp); |