# perl thread
(gdb) p my_perl
$1 = (PerlInterpreter *) 0xb
(...)
dSP;
(gdb) p my_perl
$7 = (PerlInterpreter *) 0x555555953260
(...)
# mpv thread:
(gdb) p my_perl
$2 = (PerlInterpreter *) 0x1
(...)
dSP;
(gdb) p my_perl
$3 = (PerlInterpreter *) 0x0
####
pthread_t thread;
if (pthread_create(&thread, NULL, core_thread, mpctx) != 0) {
ctx->clients->have_terminator = true; // avoid blocking
mpv_terminate_destroy(ctx);
mp_destroy(mpctx);
return NULL;
}
##
##
static void *core_thread(void *p)
{
struct MPContext *mpctx = p;
mpthread_set_name("mpv core");
while (!mpctx->initialized && mpctx->stop_play != PT_QUIT)
mp_idle(mpctx);
if (mpctx->initialized)
mp_play_files(mpctx);
// This actually waits until all clients are gone before actually
// destroying mpctx. Actual destruction is done by whatever destroys
// the last mpv_handle.
mp_shutdown_clients(mpctx);
return NULL;
}
##
##
if (ctx->wakeup_cb)
ctx->wakeup_cb(ctx->wakeup_cb_ctx);