mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-03-06 01:41:07 -05:00
server: add a safer signal type and port wl_display to it
wl_list_for_each_safe, which is used by wl_signal_emit is not really safe. If a signal has two listeners, and the first one removes and re-inits the second one, it would enter an infinite loop, which was hit in weston on resource destruction, which emits a signal. This commit adds a new version of wl_signal, called wl_priv_signal, which is private in wayland-server.c and which does not have this problem. The old wl_signal cannot be improved without breaking backwards compatibility. Signed-off-by: Giulio Camuffo <giulio.camuffo@kdab.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
This commit is contained in:
parent
23d8bc5a64
commit
5e6eb03229
4 changed files with 459 additions and 9 deletions
|
|
@ -159,6 +159,7 @@ built_test_programs = \
|
|||
socket-test \
|
||||
queue-test \
|
||||
signal-test \
|
||||
newsignal-test \
|
||||
resources-test \
|
||||
message-test \
|
||||
headers-test \
|
||||
|
|
@ -226,6 +227,9 @@ queue_test_SOURCES = tests/queue-test.c
|
|||
queue_test_LDADD = libtest-runner.la
|
||||
signal_test_SOURCES = tests/signal-test.c
|
||||
signal_test_LDADD = libtest-runner.la
|
||||
# wayland-server.c is needed here to access wl_priv_* functions
|
||||
newsignal_test_SOURCES = tests/newsignal-test.c src/wayland-server.c
|
||||
newsignal_test_LDADD = libtest-runner.la
|
||||
resources_test_SOURCES = tests/resources-test.c
|
||||
resources_test_LDADD = libtest-runner.la
|
||||
message_test_SOURCES = tests/message-test.c
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue