diff --git a/player/client.c b/player/client.c index 21c6807ad3..4a7307194a 100644 --- a/player/client.c +++ b/player/client.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -462,15 +461,18 @@ static void *core_thread(void *tag) { mpthread_set_name("mpv core"); + mpv_handle *ctx = NULL; struct MPContext *mpctx = mp_create(); - mpctx->autodetach = true; - mpv_handle *ctx = mp_new_client(mpctx->clients, "main"); - if (ctx) { - ctx->owner = true; - ctx->fuzzy_initialized = true; - m_config_set_profile(mpctx->mconfig, "libmpv", 0); - } else { - mp_destroy(mpctx); + if (mpctx) { + mpctx->autodetach = true; + ctx = mp_new_client(mpctx->clients, "main"); + if (ctx) { + ctx->owner = true; + ctx->fuzzy_initialized = true; + m_config_set_profile(mpctx->mconfig, "libmpv", 0); + } else { + mp_destroy(mpctx); + } } // Let mpv_create() return, and pass it the handle. @@ -491,24 +493,8 @@ static void *core_thread(void *tag) return NULL; } -// We mostly care about LC_NUMERIC, and how "." vs. "," is treated, -// Other locale stuff might break too, but probably isn't too bad. -static bool check_locale(void) -{ - char *name = setlocale(LC_NUMERIC, NULL); - return !name || strcmp(name, "C") == 0 || strcmp(name, "C.UTF-8") == 0; -} - mpv_handle *mpv_create(void) { - if (!check_locale()) { - // Normally, we never print anything (except if the "terminal" option - // is enabled), so this is an exception. - fprintf(stderr, "Non-C locale detected. This is not supported.\n" - "Call 'setlocale(LC_NUMERIC, \"C\");' in your code.\n"); - return NULL; - } - char tag; pthread_t thread; if (pthread_create(&thread, NULL, core_thread, &tag) != 0) diff --git a/player/main.c b/player/main.c index 66ae538d4a..bb83accb7e 100644 --- a/player/main.c +++ b/player/main.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "config.h" #include "mpv_talloc.h" @@ -263,8 +264,24 @@ static void abort_playback_cb(void *ctx) mp_abort_playback_async(mpctx); } +// We mostly care about LC_NUMERIC, and how "." vs. "," is treated, +// Other locale stuff might break too, but probably isn't too bad. +static bool check_locale(void) +{ + char *name = setlocale(LC_NUMERIC, NULL); + return !name || strcmp(name, "C") == 0 || strcmp(name, "C.UTF-8") == 0; +} + struct MPContext *mp_create(void) { + if (!check_locale()) { + // Normally, we never print anything (except if the "terminal" option + // is enabled), so this is an exception. + fprintf(stderr, "Non-C locale detected. This is not supported.\n" + "Call 'setlocale(LC_NUMERIC, \"C\");' in your code.\n"); + return NULL; + } + char *enable_talloc = getenv("MPV_LEAK_REPORT"); if (enable_talloc && strcmp(enable_talloc, "1") == 0) talloc_enable_leak_report(); @@ -441,6 +458,8 @@ int mp_initialize(struct MPContext *mpctx, char **options) int mpv_main(int argc, char *argv[]) { struct MPContext *mpctx = mp_create(); + if (!mpctx) + return 1; char **options = argv && argv[0] ? argv + 1 : NULL; // skips program name int r = mp_initialize(mpctx, options);