Skip to content

wayland: Fix internal connection teardown

Vlad Zahorodnii requested to merge work/fix-internal-connection-teardown into master

The internal EventQueue is a child of the registry object. This means that after the registry is destroyed, all proxy objects in that event queue are going to have invalid reference to it, which is not a problem as long as the wl_display_dispatch() function is not called.

The wl_display_dispatch() function uses wl_proxy's queue reference to enqueue incoming events to that queue.

Unfortunately, during teardown, the internal ConnectionThread may dispatch events right after the registry object has been destroyed, which can lead to a crash.

In order to fix the crash, we need to destroy all proxy objects and only after that we can destroy the event queue. It's okay if wayland events are dispatched in between.

Edited by Vlad Zahorodnii

Merge request reports