[PATCH wayland 1/2] protocol: document error cases with wl_shm_pool.create_buffer
ppaalanen at gmail.com
Mon Jun 2 23:58:38 PDT 2014
On Fri, 30 May 2014 12:08:15 +0200
Jonny Lamb <jonny.lamb at collabora.co.uk> wrote:
> This already happens in weston.
> protocol/wayland.xml | 5 +++++
> 1 file changed, 5 insertions(+)
> diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> index 22eb6e7..3091d83 100644
> --- a/protocol/wayland.xml
> +++ b/protocol/wayland.xml
> @@ -222,6 +222,11 @@
> A buffer will keep a reference to the pool it was created from
> so it is valid to destroy the pool immediately after creating
> a buffer from it.
> + If offset is negative, width or height are not greater than
> + zero, or the stride is less than the width the invalid_stride
> + protocol error is raised. If the format is not supported the
> + invalid_format protocol error is raised.
> <arg name="id" type="new_id" interface="wl_buffer"/>
yeah, this is the intention, but the existing protocol spec is strange.
This error happens on wl_shm_pool.create_buffer request, it is sent
against the wl_shm_pool object, but wl_shm_pool does not define this
Instead, the error is defined on wl_shm interface, and technically
those are not valid for wl_shm_pool. The namespace for the error codes
This problem is in both shm_pool_create_buffer() and shm_pool_resize()
functions in libwayland-server.
Furthermore, it seems wl_shm_buffer_end_access() is sending
WL_SHM_ERROR_INVALID_FD on the wl_buffer, which is again a namespace
Because every interface defines (or does not define) their own error
codes, and these codes are namespaced to the interface (so far all
error enums start with 0 and overlap, I think), the namespacing is
really needed to tell them apart in the receiving side.
So far we haven't had problems, because no-one expects to get a
specific error as part of normal flow. I still think this is a bad
example, and should be fixed.
- Let's duplicate all wl_shm error codes in wl_shm_pool; this maintains
the numeric values of the codes in a backward-compatible way, and
makes the namespace valid. Could even add a comment there, that these
error codes match wl_shm error codes, and wl_shm error codes can be
- wl_shm_buffer_end_access() should either use a generic wl_display
error, or we need to add an error code to wl_buffer interface to have
the proper namespace. Which?
There is also a practical reason to get this fixed, rather than "oh
it's just ugly": if someone writes a protocol analyzer, that could then
decipher the error codes in addition to showing the error message.
More information about the wayland-devel