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:
parent
dac58fdd2a
commit
af1f731f47
1 changed files with 9 additions and 16 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue