<div dir="ltr"><div>Below is the case where I'm getting stuck with the actual test case. Wondering why there is no callback wl_callback@25.done or wl_buffer@29.release<br></div><div>The EGL implementation depends on these callback/buffer release. <br>Also noticed if the valid buffer is attached immediately after null buffer, everything is fine, so most of the time it is unnoticed. If the frame is complex, egl will attach after null frame.<br><br></div><div>I will keep debug if any other race conditions in my implementation.<br></div><div><br>[3741557.293]  -> wl_surface@20.frame(new id wl_callback@25)<br>[3741557.476]  -> wl_surface@20.attach(wl_buffer@29, 0, 0)<br>[3741557.676]  -> wl_surface@20.damage(0, 0, 800, 480)<br>[3741557.906]  -> wl_surface@20.commit() <=EGL<br>[3741558.500]  -> wl_surface@20.attach(nil, 0, 0)  <=QTWayland<br>[3741558.604]  -> wl_surface@20.commit()   <=QTWayland</div>stuck<br><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Aug 21, 2015 at 12:16 PM, Jasper St. Pierre <span dir="ltr"><<a href="mailto:jstpierre@mecheye.net" target="_blank">jstpierre@mecheye.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">We need to fix that documentation, then, along with fixing Weston.<br>
mutter will give you an error with this event stream, since attaching<br>
a NULL buffer for an xdg_surface is invalid.<br>
<br>
This behavior is one of the reasons why I removed this ability from<br>
xdg_surface and instead made it an error -- the semantics were<br>
extremely unclear, and practically the same as destroying and<br>
recreating the xdg_surface. Please do that instead.<br>
<br>
However crazy it is, the logic sort of makes sense -- the "frame"<br>
event is guaranteed to be called once a frame when the surface content<br>
is painted and shown on the screen. When there's no surface content,<br>
it isn't painted, so the frame event isn't called.<br>
<br>
I'm not sure what you mean about a buffer release event -- you never<br>
attached a buffer to begin with, so I can't imagine how you'll get an<br>
event on it.<br>
<div><div class="h5"><br>
On Fri, Aug 21, 2015 at 10:03 AM, Prabhu S <<a href="mailto:prabhusundar@gmail.com">prabhusundar@gmail.com</a>> wrote:<br>
> Hi,<br>
> Based on the wayland protocol specification for wl_surface::attach<br>
>>>If wl_surface.attach is sent with a NULL wl_buffer, the following<br>
>>> wl_surface.commit will remove the surface content.<br>
><br>
> Wondering if wl_surface_attach called with wl_buffer=NULL, will there be any<br>
> wl_buffer release event or frame callbacks?<br>
><br>
> Modified the redraw in simple-shm.c as below and not receiving any callback<br>
> or buffer release. It just got stuck.<br>
> The same thing is being done in qtwayland to hide the surface and it is<br>
> getting stuck. Some help to check this case would be helpful.<br>
><br>
> static int odd = 1;<br>
> if(odd == 1){<br>
>         wl_surface_attach(window->surface, buffer->buffer, 0, 0);<br>
>         wl_surface_damage(window->surface,<br>
>                           20, 20, window->width - 40, window->height - 40);<br>
>         odd = 0;<br>
>     }<br>
>     else{<br>
>             wl_surface_attach(window->surface, 0, 0, 0);<br>
>             wl_surface_damage(window->surface,<br>
>                           0, 0, 0, 0);<br>
>             odd=1;<br>
>     }<br>
><br>
><br>
><br>
> [823379.816]  -> wl_compositor@4.create_surface(new id wl_surface@3)<br>
> [823379.949]  -> xdg_shell@6.get_xdg_surface(new id xdg_surface@7,<br>
> wl_surface@3)<br>
> [823380.120]  -> xdg_surface@7.set_title("simple-shm")<br>
> [823380.244]  -> wl_surface@3.damage(0, 0, 250, 250)<br>
> [823381.333]  -> wl_shm@5.create_pool(new id wl_shm_pool@8, fd 5, 250000)<br>
> [823381.561]  -> wl_shm_pool@8.create_buffer(new id wl_buffer@9, 0, 250,<br>
> 250, 1000, 1)<br>
> [823381.870]  -> wl_shm_pool@8.destroy()<br>
> [823384.880]  -> wl_surface@3.attach(wl_buffer@9, 0, 0)<br>
> [823385.095]  -> wl_surface@3.damage(20, 20, 210, 210)<br>
> [823385.317]  -> wl_surface@3.frame(new id wl_callback@10)<br>
> [823385.443]  -> wl_surface@3.commit()<br>
> [823388.852] wl_display@1.delete_id(8)<br>
> [823388.979] xdg_surface@7.configure(0, 0, array, 4)<br>
> [823389.238]  -> xdg_surface@7.ack_configure(4)<br>
> [823401.773] wl_display@1.delete_id(10)<br>
> [823401.908] wl_buffer@9.release()<br>
> [823401.991] wl_callback@10.done(4056537)<br>
> [823404.239]  -> wl_surface@3.attach(nil, 0, 0)<br>
> [823404.442]  -> wl_surface@3.damage(0, 0, 0, 0)<br>
> [823404.663]  -> wl_surface@3.frame(new id wl_callback@10)<br>
> [823404.792]  -> wl_surface@3.commit()<br>
> [823406.292] xdg_surface@7.configure(0, 0, array, 5)<br>
> [823406.524]  -> xdg_surface@7.ack_configure(5)<br>
><br>
><br>
</div></div>> _______________________________________________<br>
> wayland-devel mailing list<br>
> <a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a><br>
> <a href="http://lists.freedesktop.org/mailman/listinfo/wayland-devel" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/wayland-devel</a><br>
><br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
<br>
--<br>
  Jasper<br>
</font></span></blockquote></div><br></div>