compositor: Release ds_surface_viewport when ds_surface is destroyed 80/312680/2
authorSeunghun Lee <shiin.lee@samsung.com>
Thu, 13 Jun 2024 01:19:34 +0000 (10:19 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Thu, 13 Jun 2024 08:58:33 +0000 (08:58 +0000)
commitaa50d12ae6d8621deec6057dac581e693c8be742
treeef79bd29468400c94c97dcddad108e30460cb149
parent665d96187a8ed1953dc53022e02e5b6ae0870d3a
compositor: Release ds_surface_viewport when ds_surface is destroyed

This is to fix abort by calling ds_surface_viewport_release() after
ds_surface has been destroyed.

The listeners added using e_surface_destroy_listener_add() have been
called in a hook handler E_CLIENT_HOOK_DEL, which is emitted when
e_object_del() is called for the associated E_Client. However, if
e_object_delay_del_ref() is called for the E_Client, the listeners for
E_CLIENT_HOOK_DEL would not be called immediately. Instead, it is
called when delay_del_ref count is dropped to zero by calling
e_object_delay_del_unref().

This means that listeners of e_surface_destroy_listener_add() can be
called after ds_surface is already freed, and the call to
ds_surface_viewport_release() in this case causes undefined behavior.

Change-Id: Ie8f316b2aef841c89386a41f19a4f5066d98d9bc
src/bin/server/e_compositor.c