[Wayland-bugs] [Bug 75303] Protocol: wl_buffer.release is racy

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Thu Sep 17 05:43:34 PDT 2015


https://bugs.freedesktop.org/show_bug.cgi?id=75303

--- Comment #10 from Jonas Ådahl <jadahl at gmail.com> ---
(In reply to Pekka Paalanen from comment #9)
> (In reply to Jonas Ådahl from comment #8)
> > Ok, yes I see it now.(In reply to Pekka Paalanen from comment #7)
> > (In reply to Pekka Paalanen from comment #5)
> > > Client side reference counting, that is, for every committed attach there
> > > will be a release, seems like the preferred solution to me at the moment.
> > 
> > How do you expect the client to get the new semantics (one release per
> > commit) or do you mean to change it for everyone?
> 
> For everyone, yes.
> 
> I would hope that attaching the same wl_buffer to multiple surfaces is rare
> enough that we can get away with it. Committing the same wl_buffer to a
> surface before waiting for a release or a frame callback is I hope equally
> rare. (If you wait for frame callback, you're probably going to draw, so
> using a busy buffer is a mistake to begin with. If you wait for a release,
> there is no race.)
> 
> Since you cannot get the wl_buffer out of EGL, EGL should never hit a case
> where the client-side reference count would be more than one.
> 
> Also judging by krh's comment, it was probably expected to work in refcount
> manner to begin with, we (probably just me) just screwed up the spec and
> Weston.
> 
> Bumping the wl_surface version for this is IMO a backup plan, in case we
> can't just change the semantics for everyone.
> 
> For now, this is a quite theoretical race, which is why I think we can solve
> this now. With Presentation queueing that would change, so this must be
> solved before queueing can get further.

Reading between the lines in the description, one could assume only one surface
was considered, since it only talks about that scenario, so I agree it should
be a reasonable change to do.

The only issue would be that it's hard for the client (especially EGL) to know
when it can rely on the multi-surface case to work properly, especially if it's
not possible to get the version of the bound (wl_surface) proxy (or the newest
version supported by the server). I experimented once with implementing a
"wl_version" interface to solve a similar issue (request version information
from the server given an existing object) without needing to change any client
API, but feels a bit hacky to need to do such a roundtrip.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-bugs/attachments/20150917/bc8feb7b/attachment.html>


More information about the wayland-bugs mailing list