[PATCH 0/1] Add remove-without-free test

wl at ongy.net wl at ongy.net
Fri Feb 23 08:54:55 UTC 2018


From: Markus Ongyerth <wl at ongy.net>

In [1] it was pointed out, that the proposed patch breaks code, that does not
remove their listener from a wl_signal list, but just free()s them.

>From libwayland's perspective, this has never been different. People just got
lucky.
wl_priv_signal_emit will touch the recently free()d memory again IFF there is
another listener behind it in the signal list.
The attached patch makes this obvious under valgrind (memcheck). I would prefer
if it failed the testcase, but I'm not sure how to do that (some sanitizer
options?).

Going forward, it would be relativly easy to add a special case for single
listener signals to the original patch, but in the rather lengthy discussion we
had earlier, we concluded that we should try to fix clients from libwayland
side.
But this could cause problems for code that uses wl_signal and wl_signal_emit
internally, since that should actually not touch any previously called
wl_listener in the signal list (until next emit).

A secondary emit_destroy (emit_final) path as suggested in [2] seems to be the
better way.


[1] https://lists.freedesktop.org/archives/wayland-devel/2018-February/037168.html
[2] https://lists.freedesktop.org/archives/wayland-devel/2018-February/037203.html

Markus Ongyerth (1):
  tests: Add free-without-remove test

 Makefile.am                 |  3 ++
 tests/free-without-remove.c | 70 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+)
 create mode 100644 tests/free-without-remove.c

-- 
2.16.2



More information about the wayland-devel mailing list