Skip to content

tests: nle: Call ges_init() only inside test cases

Some NLE tests were calling ges_init() from the test suite initialization function. This was causing them to deadlock when running with glib 2.76.3.

ges_init() causes a GThreadPool to be initialized. Even if GES at this point doesn't request any thread to be created, since glib 2.63.4+ (see https://gitlab.gnome.org/GNOME/glib/-/commit/8aeca4fa647bfd0f35c4a86b1e6ca6e955519ca5) the first time a GThreadPool is initialized a "pool-spawner" thread is created, which is later used by g_thread_pool_push().

The default behavior of the GStreamer check tests is to fork for every test case. This is not safe if any thread has been created at this point. In this particular case, GThreadPool preserves the state that says a "pool-spawner" thread has been created, and will have access to its mutex and condition variable, but their queues will have different contents as the memory has been forked. In consequence, calls to g_thread_pool_push() will deadlock.

The deadlock will not occur if running the tests with CK_FORK=no.

This patch modifies the affected tests to only call ges_init() from inside the test cases, fixing the deadlock.

Merge request reports