ref: f368f86df6705711dc3341dd910686911270ce69
parent: 18e53642b75a97c985f48aa786ec6564f2daf331
author: James Zern <jzern@google.com>
date: Sat Jul 23 06:59:15 EDT 2016
vp9: fix frame-level threaded decode shutdown Shutdown all threads before reclaiming any memory. The frame-level parallel decoder may access data from another worker. BUG=webm:1259 Change-Id: I26856ebd1f77cc4a4545331baa19bbf3e01c4ea4
--- a/vp9/vp9_dx_iface.c
+++ b/vp9/vp9_dx_iface.c
@@ -64,11 +64,16 @@
static vpx_codec_err_t decoder_destroy(vpx_codec_alg_priv_t *ctx) {
if (ctx->frame_workers != NULL) {
int i;
+ // Shutdown all threads before reclaiming any memory. The frame-level
+ // parallel decoder may access data from another worker.
for (i = 0; i < ctx->num_frame_workers; ++i) {
VPxWorker *const worker = &ctx->frame_workers[i];
+ vpx_get_worker_interface()->end(worker);
+ }
+ for (i = 0; i < ctx->num_frame_workers; ++i) {
+ VPxWorker *const worker = &ctx->frame_workers[i];
FrameWorkerData *const frame_worker_data =
(FrameWorkerData *)worker->data1;
- vpx_get_worker_interface()->end(worker);
vp9_remove_common(&frame_worker_data->pbi->common);
#if CONFIG_VP9_POSTPROC
vp9_free_postproc_buffers(&frame_worker_data->pbi->common);