[PATCH wayland] shm: Add wl_shm_buffer get/put functions

Jasper St. Pierre jstpierre at mecheye.net
Sun Oct 4 08:49:05 PDT 2015


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 <giuliocamuffo at gmail.com> wrote:
> 2015-07-18 0:30 GMT+03:00 Derek Foreman <derekf at osg.samsung.com>:
>> 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 <derekf at osg.samsung.com>
>> ---
>>  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
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel



-- 
  Jasper


More information about the wayland-devel mailing list