weston/tests
Daniel Stone 6c8ae362bb CI: Never unload llvmpipe DSO whilst testing
This commit is truly horrible.

We want to run ASan with leak checking enabled in CI so we can catch
memory leaks before they're introduced. This works well with Pixman, and
with NIR-only drivers like iris or Panfrost.

But when we run under llvmpipe - which we do under CI - we start failing
because:
  - Mesa pulls in llvmpipe via dlopen
  - llvmpipe pulls in LLVM itself via DT_NEEDED
  - initialising LLVM's global type/etc systems performs thread-local
    allocations
  - llvmpipe can't free those allocations since the application might
    also be using LLVM
  - Weston stops using GL and destroys all GL objects, leading to Mesa
    unloading llvmpipe like it should
  - with everything disappearing from the process's vmap, ASan can no
    longer keep track of still-reachable pointers
  - tests fail because LLVM is 'leaking'

Usually, an alternative is to LD_PRELOAD a shim which overrides
dlclose() to be a no-op. This is not usable here, because when
$LD_PRELOAD is not empty and ASan is not first in it, ASan immediately
errors out. Prepending ASan doesn't work, because we run our tests
through Meson (which also invokes Ninja), leading to LSan exploding
over CPython and Ninja, which is not what we're interested in.

It would be possible to inject _both_ ASan and a dlclose-does-nothing
shim DSO into the LD_PRELOAD environment for every test, but that seems
even worse, especially as Meson strongly discourages globbing for random
files in the root.

So, here we are, doing what we can: finding where swrast_dri.so (aka
llvmpipe) lives, stashing that in an environment variable, and
deliberately leaking a dlopen handle which we never close to ensure that
neither llvmpipe nor LLVM leave our process's address space before we
exit.

Signed-off-by: Daniel Stone <daniels@collabora.com>
2022-07-05 10:15:49 +01:00
..
reference tests/color-icc-output: add blending test 2022-07-01 07:46:02 +00:00
visualization tests/alpha-blending: replace compare_float() with rgb_diff_stat 2022-06-30 09:08:32 +00:00
alpha-blending-test.c tests/alpha-blending: use two_norm tolerance 2022-06-30 09:08:32 +00:00
bad-buffer-test.c tests: fix leaks in bad-buffer 2021-06-15 07:43:00 +00:00
buffer-transforms-test.c tests: fix refname leaks 2021-06-15 07:43:00 +00:00
color-icc-output-test.c tests/color-icc-output: add blending test 2022-07-01 07:46:02 +00:00
color-manager-test.c Revert "compositor: add weston.ini option use-renderer-shadow" 2021-06-14 16:04:43 +03:00
color-metadata-errors-test.c tests: add color-metadata-errors test 2022-05-27 10:30:35 +00:00
color-metadata-parsing-test.c tests: add color-metadata-parsing 2022-05-27 10:30:35 +00:00
color_util.c tests/color_util: expose color_float_apply_curve() 2022-07-01 07:46:02 +00:00
color_util.h tests/color_util: expose color_float_apply_curve() 2022-07-01 07:46:02 +00:00
config-parser-test.c tests: add get_double in config-parser tests 2022-03-14 08:50:30 +00:00
devices-test.c tests: Use test-desktop-shell for devices-test 2022-06-29 11:38:36 +00:00
drm-formats-test.c drm-formats: add weston_drm_format_array_count_pairs() 2021-11-25 10:47:45 -03:00
drm-smoke-test.c tests: fix leak in drm-smoke-test.c 2022-01-21 11:49:34 +00:00
event-test.c tests: fix leak in events 2021-06-16 14:41:08 +00:00
image-iter.h tests/color-icc-output: extract image-iter.h 2022-06-16 08:52:12 +00:00
input-timestamps-helper.c tests: replace fprintf() with testlog() 2019-11-22 12:54:10 +02:00
input-timestamps-helper.h tests: Introduce input timestamps helper 2018-02-20 10:20:29 +02:00
internal-screenshot-test.c tests/internal-screenshot: use image-iter.h 2022-06-16 08:52:12 +00:00
ivi-layout-internal-test.c tests: migrate ivi-layout-internal 2020-01-30 10:10:35 +00:00
ivi-layout-test-client.c tests: fix leaks in ivi-layout-test-client 2021-06-16 14:41:08 +00:00
ivi-layout-test-plugin.c tests: preserve ivi runner section 2022-03-08 14:50:41 +02:00
ivi-shell-app-test.c tests: fix leak in ivi-shell-app-test 2021-06-16 14:41:08 +00:00
ivi-test.h ivi-shell: implement surface_on_many_layer test 2016-06-29 11:32:23 +03:00
keyboard-test.c tests: destroy client in keyboard-test 2021-06-16 14:41:08 +00:00
lcms-util-test.c tests: add lcms-util with MPE curves 2022-06-03 10:22:25 +00:00
lcms_util.c tests/lcms_util: add SetTextTags() 2022-06-03 10:22:25 +00:00
lcms_util.h tests/lcms_util: add SetTextTags() 2022-06-03 10:22:25 +00:00
linux-explicit-synchronization-test.c tests: fix all leaks in linux-explicit-synchronization-test 2021-06-28 14:21:27 +03:00
matrix-test.c tests: add matrix-test for CI 2022-05-31 12:26:09 +00:00
meson.build CI: Never unload llvmpipe DSO whilst testing 2022-07-05 10:15:49 +01:00
output-damage-test.c tests: fix refname leaks 2021-06-15 07:43:00 +00:00
output-transforms-test.c tests: fix refname leaks 2021-06-15 07:43:00 +00:00
plugin-registry-test.c tests: thread-based client harness 2020-01-30 10:10:34 +00:00
pointer-shot-test.c tests: fix leak in surface_commit_color() in pointer-shot 2021-06-16 14:41:08 +00:00
pointer-test.c tests: destroy client in pointer-test 2021-06-16 14:41:08 +00:00
presentation-test.c tests: fix leaks in presentation-test 2021-06-16 14:41:08 +00:00
roles-test.c tests/roles: switch to xdg-shell 2021-07-23 17:26:02 +01:00
safe-signal-output-removal-test.c Move shell-utils to its own directory 2022-03-31 17:15:55 +00:00
safe-signal-test.c safe-signal-test: Fix leak 2022-06-29 14:33:21 +01:00
setbacklight.c tests: Update boilerplate from MIT X11 license to MIT Expat license 2015-06-15 13:04:19 -07:00
string-test.c tests: add missing include 2017-01-23 14:12:06 +02:00
subsurface-shot-test.c subsurface-shot-test: Don't leak replaced buffer 2022-06-29 14:33:22 +01:00
subsurface-test.c tests: reduce subsurface-test verbosity 2021-06-23 15:20:25 +03:00
surface-global-test.c libweston: Rename weston_surface_destroy() to weston_surface_unref() 2022-05-12 16:46:31 +03:00
surface-screenshot-test.c Unify the include style of shared/ headers 2019-10-04 16:04:48 +03:00
surface-test.c libweston: Rename weston_surface_destroy() to weston_surface_unref() 2022-05-12 16:46:31 +03:00
text-test.c tests: fix all leaks in text-test 2021-06-28 14:21:27 +03:00
timespec-test.c Unify the include style of shared/ headers 2019-10-04 16:04:48 +03:00
touch-test.c tests: fix all leaks in touch-test 2021-06-28 14:21:27 +03:00
vertex-clip-test.c shared/helpers: use ARRAY_COPY where possible 2021-04-28 12:17:24 -03:00
viewporter-shot-test.c tests: introduce struct fixture_metadata 2021-02-17 12:52:33 +00:00
viewporter-test.c tests: clean up after viewporter-test 2021-05-31 12:35:01 +03:00
weston-test-client-helper.c tests: add scalar_stat dumps 2022-06-30 09:08:32 +00:00
weston-test-client-helper.h tests: add scalar_stat dumps 2022-06-30 09:08:32 +00:00
weston-test-desktop-shell.c test-desktop-shell: Mark weston_curtain views as mapped 2022-06-16 12:17:15 +03:00
weston-test-fixture-compositor.c tests: Don't leak args when skipping tests 2022-06-29 14:33:22 +01:00
weston-test-fixture-compositor.h tests: add mechanism to change Weston's behavior when running certain tests 2020-10-27 11:21:55 +00:00
weston-test-runner.c CI: Never unload llvmpipe DSO whilst testing 2022-07-05 10:15:49 +01:00
weston-test-runner.h tests: Bump alignment for test structures to 64 bytes 2021-08-03 18:42:25 +01:00
weston-test.c libweston: Add weston_surface_map() wrapper 2022-06-16 12:17:15 +03:00
weston-testsuite-data.h tests: use fixture names in reports 2021-02-17 12:52:33 +00:00
xwayland-test.c tests/xwayland: Remove manual timeout implementation 2021-12-14 14:57:40 +00:00
yuv-buffer-test.c tests/yuv-buffer: use image-iter.h for rgb_image 2022-06-16 08:52:12 +00:00