test: gstreamer: Disable gstreamer registry forks

ASan needs to be loaded first before gstreamer is loaded. This was not
possible, so verify_asan_link_order was disabled. Better way to tackle
this issue was disabling forks on the gstreamer side.

verify_asan_link_order=0 disables the check on ASan side which checks if
ASan was loaded before any other shared objects. Since, gstreamer spawns
a child helper process while building the registry, we needed to disable
this check. But with gst_registry_fork_set_enabled() it is possible to
disable spawning this child helper process, so this ensures that ASan is
loaded before any other shared object is loaded.

Signed-off-by: Vedant Paranjape <vedantparanjape160201@gmail.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Vedant Paranjape 2021-08-21 20:11:45 +05:30 committed by Laurent Pinchart
parent dac58fdd2a
commit af1f731f47

View file

@ -36,23 +36,16 @@ protected:
int init() override
{
/*
* GStreamer spawns a process to run the gst-plugin-scanner
* helper. If libcamera is compiled with ASan enabled, and as
* GStreamer is most likely not, this will cause the ASan link
* order check to fail when gst-plugin-scanner dlopen()s the
* plugin as many libraries will have already been loaded by
* then. Work around this issue by disabling the link order
* check. This will only affect child processes, as ASan is
* already loaded for this process by the time this code is
* executed, and should thus hopefully be safe.
*
* This option is not available in gcc older than 8, the only
* option in that case is to skip the test.
* GStreamer by default spawns a process to run the
* gst-plugin-scanner helper. If libcamera is compiled with ASan
* enabled, and as GStreamer is most likely not, this causes the
* ASan link order check to fail when gst-plugin-scanner
* dlopen()s the plugin as many libraries will have already been
* loaded by then. Fix this issue by disabling spawning of a
* child helper process when scanning the build directory for
* plugins.
*/
#if defined(__SANITIZE_ADDRESS__) && !defined(__clang__) && __GNUC__ < 8
return TestSkip;
#endif
setenv("ASAN_OPTIONS", "verify_asan_link_order=0", 1);
gst_registry_fork_set_enabled(false);
/* Initialize GStreamer */
g_autoptr(GError) errInit = NULL;