When a buffer of deleted e_client destroied, it has unrefed e_client and freed
e_client. but if there remains some action using the e_client such as ecore
event, it's able to try to use e_client which is freed before. for example, if
the event free function is called after buffer destroy, it will try to unref
e_client which is freed already.
For prevent those problem, it's desirable to clear comp object immediately
insted of to unref e_client.
related patch:
feaa183a35fbbae4fcf6b9cf27eaee3e7432db73
Change-Id: I47c971b5ae1d1a5ff3a6c11bb5e80ad21c9b9224
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
sid = wl_resource_get_id(buffer->resource);
if ((sid) && (ec = eina_hash_find(clients_buffer_hash, &sid)))
{
- if (e_object_is_del(E_OBJECT(ec)))
- while (e_object_unref(E_OBJECT(ec)) > 0);
eina_hash_del_by_key(clients_buffer_hash, &sid);
+ if (e_object_is_del(E_OBJECT(ec)))
+ {
+ /* clear comp object immediately */
+ e_comp_object_redirected_set(ec->frame, 0);
+ evas_object_del(ec->frame);
+ ec->frame = NULL;
+ }
}
wl_signal_emit(&buffer->destroy_signal, buffer);