exposay: Fix use after free when a view is destroyed during animation
Moving the destroy listener setup allows the animation completion handler to be called before we free any structures it needs. Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
This commit is contained in:
parent
daf846e4ea
commit
d8156e22f6
@ -296,9 +296,6 @@ exposay_layout(struct desktop_shell *shell, struct shell_output *shell_output)
|
|||||||
esurface->eoutput = eoutput;
|
esurface->eoutput = eoutput;
|
||||||
esurface->view = view;
|
esurface->view = view;
|
||||||
|
|
||||||
esurface->view_destroy_listener.notify = handle_view_destroy;
|
|
||||||
wl_signal_add(&view->destroy_signal, &esurface->view_destroy_listener);
|
|
||||||
|
|
||||||
esurface->row = i / eoutput->grid_size;
|
esurface->row = i / eoutput->grid_size;
|
||||||
esurface->column = i % eoutput->grid_size;
|
esurface->column = i % eoutput->grid_size;
|
||||||
|
|
||||||
@ -322,6 +319,15 @@ exposay_layout(struct desktop_shell *shell, struct shell_output *shell_output)
|
|||||||
|
|
||||||
exposay_animate_in(esurface);
|
exposay_animate_in(esurface);
|
||||||
|
|
||||||
|
/* We want our destroy handler to be after the animation
|
||||||
|
* destroy handler in the list, this way when the view is
|
||||||
|
* destroyed, the animation can safely call the animation
|
||||||
|
* completion callback before we free the esurface in our
|
||||||
|
* destroy handler.
|
||||||
|
*/
|
||||||
|
esurface->view_destroy_listener.notify = handle_view_destroy;
|
||||||
|
wl_signal_add(&view->destroy_signal, &esurface->view_destroy_listener);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user