--- CV/CV.xs 2021/11/28 23:26:51 1.63 +++ CV/CV.xs 2021/12/02 03:11:45 1.65 @@ -591,11 +591,18 @@ size_t avail_in = SvCUR (image_data); const char *error = 0; JxlDecoderStatus status; + static void *runner_cache; void *runner = 0; - struct bmff_box box; RETVAL = 0; + if (runner_cache) + runner = runner_cache; + else + runner = JxlThreadParallelRunnerCreate (0, JxlThreadParallelRunnerDefaultNumWorkerThreads ()); + + runner_cache = 0; + perlinterp_release (); dec = JxlDecoderCreate (0); @@ -604,8 +611,6 @@ if (!dec) goto done; - runner = JxlThreadParallelRunnerCreate (0, JxlThreadParallelRunnerDefaultNumWorkerThreads ()); - status = JxlDecoderSetParallelRunner (dec, JxlThreadParallelRunner, runner); error = "JxlDecoderSetParallelRunner failed"; if (status != JXL_DEC_SUCCESS) @@ -690,10 +695,12 @@ if (dec) JxlDecoderDestroy (dec); - if (runner) + perlinterp_acquire (); + + if (runner_cache) JxlThreadParallelRunnerDestroy (runner); - perlinterp_acquire (); + runner_cache = runner; if (error) {