Don't delete busy E_Comp_Wl_Buffers
Hardware planes are going to make E_Comp_Wl_Buffer lifetimes harder to manage, so we need to let the E_Comp_Wl_Buffer object outlive the resource attached to it. We already track a busy count, so we just have to use it to prevent deleting a busy buffer.
This commit is contained in:
parent
acd0e4b036
commit
18fbd1da32
|
@ -1010,6 +1010,9 @@ _e_comp_wl_buffer_cb_destroy(struct wl_listener *listener, void *data EINA_UNUSE
|
|||
|
||||
buffer = container_of(listener, E_Comp_Wl_Buffer, destroy_listener);
|
||||
wl_signal_emit(&buffer->destroy_signal, buffer);
|
||||
buffer->destroyed = EINA_TRUE;
|
||||
|
||||
if (!buffer->busy)
|
||||
free(buffer);
|
||||
}
|
||||
|
||||
|
|
|
@ -63,6 +63,7 @@ struct _E_Comp_Wl_Buffer
|
|||
E_Pixmap *discarding_pixmap;
|
||||
int32_t w, h;
|
||||
uint32_t busy;
|
||||
Eina_Bool destroyed;
|
||||
};
|
||||
|
||||
struct _E_Comp_Wl_Surface_State
|
||||
|
|
|
@ -144,6 +144,12 @@ _e_pixmap_wl_resource_release(E_Comp_Wl_Buffer *buffer)
|
|||
buffer->pool = NULL;
|
||||
}
|
||||
|
||||
if (buffer->destroyed)
|
||||
{
|
||||
free(buffer);
|
||||
return;
|
||||
}
|
||||
|
||||
wl_resource_queue_event(buffer->resource, WL_BUFFER_RELEASE);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue