vo_vdpau: fix possible crash after preemption

Preemption recovery code could change the vc->vdp pointer when
recreating the VDPAU device. However, some other code cached the value
of vc->vdp in local variables over calls to handle_preemption(), and
could then crash when using the stale value later. Make the device
creation code keep the same vc->vdp instead of freeing and
reallocating it, so that the old pointer value is never invalidated
now.
This commit is contained in:
Uoti Urpala 2012-07-12 19:04:57 +03:00
parent 2ba8b91a97
commit 0a1fc392b4
1 changed files with 5 additions and 3 deletions

View File

@ -456,9 +456,11 @@ static int win_x11_init_vdpau_procs(struct vo *vo)
{ {
struct vo_x11_state *x11 = vo->x11; struct vo_x11_state *x11 = vo->x11;
struct vdpctx *vc = vo->priv; struct vdpctx *vc = vo->priv;
talloc_free(vc->vdp); // In case this is reinitialization after preemption if (vc->vdp) // reinitialization after preemption
struct vdp_functions *vdp = talloc_zero(vc, struct vdp_functions); memset(vc->vdp, 0, sizeof(*vc->vdp));
vc->vdp = vdp; else
vc->vdp = talloc_zero(vc, struct vdp_functions);
struct vdp_functions *vdp = vc->vdp;
VdpStatus vdp_st; VdpStatus vdp_st;
struct vdp_function { struct vdp_function {