mirror of https://github.com/mpv-player/mpv
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:
parent
2ba8b91a97
commit
0a1fc392b4
|
@ -456,9 +456,11 @@ static int win_x11_init_vdpau_procs(struct vo *vo)
|
|||
{
|
||||
struct vo_x11_state *x11 = vo->x11;
|
||||
struct vdpctx *vc = vo->priv;
|
||||
talloc_free(vc->vdp); // In case this is reinitialization after preemption
|
||||
struct vdp_functions *vdp = talloc_zero(vc, struct vdp_functions);
|
||||
vc->vdp = vdp;
|
||||
if (vc->vdp) // reinitialization after preemption
|
||||
memset(vc->vdp, 0, sizeof(*vc->vdp));
|
||||
else
|
||||
vc->vdp = talloc_zero(vc, struct vdp_functions);
|
||||
struct vdp_functions *vdp = vc->vdp;
|
||||
VdpStatus vdp_st;
|
||||
|
||||
struct vdp_function {
|
||||
|
|
Loading…
Reference in New Issue