I imagine get/put is named after the kernel style. I typically see ref/unref for userspace names (or ref/destroy, but nobody likes that).
On Sun, Oct 4, 2015 at 8:34 AM, Giulio Camuffo <[email protected]> wrote: > 2015-07-18 0:30 GMT+03:00 Derek Foreman <[email protected]>: >> Sometimes the compositor wants to make sure a shm pool doesn't disappear >> out from under it. >> >> For example, in Enlightenment, rendering happens in a separate thread >> while the main thread can still dispatch events. If a client is destroyed >> during rendering, all its resources are cleaned up and its shm pools are >> unmapped. This causes the rendering thread to segfault. >> >> This patch adds a way for the compositor to increment the refcount of the >> shm pool so it can't disappear, and decrement it when it's finished. > > I don't like much the names of these new functions, i wouldn't expect > a function named get_something() to have side effects. Also, > wl_shm_buffer_put_pool() doesn't take a wl_shm_buffer, but the > wl_shm_pool. > What about wl_shm_buffer_ref_pool(buffer) and > wl_shm_pool_deref(pool)/wl_shm_buffer_deref_pool(buffer)? > > > -- > Giulio > >> >> Signed-off-by: Derek Foreman <[email protected]> >> --- >> src/wayland-server-core.h | 7 +++++++ >> src/wayland-shm.c | 15 +++++++++++++++ >> 2 files changed, 22 insertions(+) >> >> diff --git a/src/wayland-server-core.h b/src/wayland-server-core.h >> index e605432..a4a04fc 100644 >> --- a/src/wayland-server-core.h >> +++ b/src/wayland-server-core.h >> @@ -362,6 +362,7 @@ wl_resource_get_destroy_listener(struct wl_resource >> *resource, >> resource = tmp, >> \ >> tmp = >> wl_resource_from_link(wl_resource_get_link(resource)->next)) >> >> +struct wl_shm_pool; >> struct wl_shm_buffer; >> >> void >> @@ -388,6 +389,12 @@ wl_shm_buffer_get_width(struct wl_shm_buffer *buffer); >> int32_t >> wl_shm_buffer_get_height(struct wl_shm_buffer *buffer); >> >> +struct wl_shm_pool * >> +wl_shm_buffer_get_pool(struct wl_shm_buffer *buffer); >> + >> +void >> +wl_shm_buffer_put_pool(struct wl_shm_pool *pool); >> + >> int >> wl_display_init_shm(struct wl_display *display); >> >> diff --git a/src/wayland-shm.c b/src/wayland-shm.c >> index 5c419fa..48b5140 100644 >> --- a/src/wayland-shm.c >> +++ b/src/wayland-shm.c >> @@ -412,6 +412,21 @@ wl_shm_buffer_get_height(struct wl_shm_buffer *buffer) >> return buffer->height; >> } >> >> +WL_EXPORT struct wl_shm_pool * >> +wl_shm_buffer_get_pool(struct wl_shm_buffer *buffer) >> +{ >> + assert(buffer->pool->refcount); >> + >> + buffer->pool->refcount++; >> + return buffer->pool; >> +} >> + >> +WL_EXPORT void >> +wl_shm_buffer_put_pool(struct wl_shm_pool *pool) >> +{ >> + shm_pool_unref(pool); >> +} >> + >> static void >> reraise_sigbus(void) >> { >> -- >> 2.1.4 >> > _______________________________________________ > wayland-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/wayland-devel -- Jasper _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
