Skip to content
Commit 5e0f7ad1 authored by Derek Foreman's avatar Derek Foreman
Browse files

server: Add special case destroy signal emitter



In the past much code (weston, efl/enlightenment, mutter) has
freed structures containing wl_listeners from destroy handlers
without first removing the listener from the signal.  As the
destroy notifier only fires once, this has largely gone
unnoticed until recently.

Other code does not (Qt, wlroots) - and removes itself from
the signal before free.

If somehow a destroy signal is listened to by code from both
kinds of callers, those that free will corrupt the lists for
those that don't, and Bad Things will happen.

To avoid these bad things, remove every item from the signal list
during destroy emit, and put it in a list all its own.  This way
whether the listener is removed or not has no impact on the
following emits.

Signed-off-by: default avatarDerek Foreman <derekf@osg.samsung.com>
Reviewed-by: default avatarSimon Ser <contact@emersion.fr>
Reviewed-by: default avatarMarkus Ongyerth <wl@ongy.net>
parent 58ee271b
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment