mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-30 12:49:40 +00:00
pluginloader: make sure gst-plugin-scanner is called with the right arch on OSX
On OSX, GStreamer might be built as a 'fat/universal' binary containing both 32-bit and 64-bit code. We must take care that gst-plugin-scanner is executed with the same architecture as the GStreamer core, otherwise bad things may happen and core/scanner will not be able to communicate properly. Should fix issues with (32-bit) firefox using a 32-bit GStreamer core which then spawns a 'universal' gst-plugin-scanner binary which gets run in 64-bit mode, causing 100% cpu usage / busy loops or just hanging firefox until killed. https://bugzilla.gnome.org/show_bug.cgi?id=615357
This commit is contained in:
parent
fd5aa095da
commit
159cf687a1
1 changed files with 19 additions and 0 deletions
|
@ -353,9 +353,28 @@ plugin_loader_create_blacklist_plugin (GstPluginLoader * l,
|
|||
static gboolean
|
||||
gst_plugin_loader_try_helper (GstPluginLoader * loader, gchar * location)
|
||||
{
|
||||
#ifdef __APPLE__
|
||||
#if defined(__x86_64__)
|
||||
char *argv[] = { "/usr/bin/arch", "-x86_64", location, (char *) "-l", NULL };
|
||||
#elif defined(__i386__)
|
||||
char *argv[] = { "/usr/bin/arch", "-i386", location, (char *) "-l", NULL };
|
||||
#elif defined(__ppc__)
|
||||
char *argv[] = { "/usr/bin/arch", "-ppc", location, (char *) "-l", NULL };
|
||||
#elif defined(__ppc64__)
|
||||
char *argv[] = { "/usr/bin/arch", "-ppc64", location, (char *) "-l", NULL };
|
||||
#endif
|
||||
#else /* ! __APPLE__ */
|
||||
char *argv[] = { location, (char *) "-l", NULL };
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __APPLE__
|
||||
GST_LOG ("Trying to spawn gst-plugin-scanner helper at %s with arch %s",
|
||||
location, argv[1]);
|
||||
#else
|
||||
GST_LOG ("Trying to spawn gst-plugin-scanner helper at %s", location);
|
||||
#endif
|
||||
|
||||
if (!g_spawn_async_with_pipes (NULL, argv, NULL,
|
||||
G_SPAWN_DO_NOT_REAP_CHILD /* | G_SPAWN_STDERR_TO_DEV_NULL */ ,
|
||||
NULL, NULL, &loader->child_pid, &loader->fd_w.fd, &loader->fd_r.fd,
|
||||
|
|
Loading…
Reference in a new issue