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.
devs/discomfitor/action_route
Derek Foreman 6 years ago
parent acd0e4b036
commit 18fbd1da32
  1. 5
      src/bin/e_comp_wl.c
  2. 1
      src/bin/e_comp_wl.h
  3. 6
      src/bin/e_pixmap.c

@ -1010,7 +1010,10 @@ _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);
free(buffer);
buffer->destroyed = EINA_TRUE;
if (!buffer->busy)
free(buffer);
}
static void

@ -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…
Cancel
Save