vdpau: fix uninit when init fails

The uninit() function was called twice if the uninit() function failed
(once by init(), once by vd_lavc.c code), which caused crashes due to
double-free. (This failure is a corner case, and all other hwdec
backends appear to handle this case gracefully.)

I do not think this code should be able to deal with uninit() being
called other than once. Guarantee that it's called exactly once.
This commit is contained in:
wm4 2015-11-01 22:55:43 +01:00
parent 8e8b420c9d
commit 1d2d649281
2 changed files with 2 additions and 5 deletions

View File

@ -456,6 +456,7 @@ static void uninit_avctx(struct dec_video *vd)
if (ctx->hwdec && ctx->hwdec->uninit)
ctx->hwdec->uninit(ctx);
ctx->hwdec = NULL;
av_freep(&ctx->avctx);

View File

@ -80,13 +80,9 @@ static int init(struct lavc_ctx *ctx)
ctx->hwdec_priv = p;
if (mp_vdpau_handle_preemption(p->mpvdp, &p->preemption_counter) < 1)
goto error;
return -1;
return 0;
error:
uninit(ctx);
return -1;
}
static int probe(struct vd_lavc_hwdec *hwdec, struct mp_hwdec_info *info,