On Mon, May 30, 2016 at 01:10:42PM +0200, Miguel Angel Vico wrote: > Hi all, > > A few days ago, I had a little chat over IRC with Pekka about addition > of proxy objects destruction callbacks to the wayland client protocol. > > > Summing up, we recently ran into some applications where native objects > (wl_surface, wl_egl_window, wl_display) used by EGL are destroyed/made > invalid before destroying the corresponding EGL objects. This sometimes > causes crashes of the EGL driver, which is not nice. We have seen this > with the NVIDIA EGL implementation, but I assume the Mesa EGL > implementation is similarly exposed. > > I agree this is in fact an application bug, but the EGL spec states that > functions such as makeCurrent or swapBuffers should return error (not > crash) if the native objects become invalid. I also agree the spec > should have been clearer and probably allowed "undefined behavior", but > it is not the case. > > Having an objects destruction notification mechanism such as destruction > callbacks would allow us to satisfy the spec. > > Also, such functionality would also make life way easier under certain > circumstances. I'm basically thinking about multi-threaded applications, > where several threads make use of the same native objects, and for some > reason one of the threads has to destroy one or more of them due to some > sort of error happening. > > Of course, this can still be considered an application bug, and the > application could still make sure none of the threads is going to use > the native objects before destroying them, but again, specs allow users > to do many non-recommended things. > > I think we should try to do our best to gracefully handle those > non-desirable API usages, and avoid crashes whenever is possible. > > > Pekka did not see this as something crazy to have, but wanted to hear > from some of the toolkits guys before making the decision of whether > changing the wl_proxy ABI is a good idea. > > > As an alternative, destruction callbacks could be hung off of > wl_egl_window. In a similar way we support wl_egl_window_resize > callbacks, we could support wl_egl_window_destroy callbacks. > > However, this isn't as foolproof as adding wl_proxy destruction > callbacks, since destruction of wl_surface or wl_display objects before > wl_egl_window would lead to same issues. > > > I really think adding destruction callbacks to wl_proxy would be an > improvement worth making, but others' thoughts must be heard first.
Just a quick comment: I guess a piglit testcase to demonstrate the failure (or well, just any minimal test) would be awesome. That way folks can quickly figure out what all goes wrong without this. -Daniel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
