registry: add support for GST_REGISTRY_REUSE_PLUGIN_SCANNER=no
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 18 Oct 2011 22:19:47 +0000 (23:19 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 26 Oct 2011 10:20:16 +0000 (11:20 +0100)
This will make sure we spawn a new plugin scanner helper for each plugin
to be introspected, which helps with making sure we don't load too many
shared objects (libs, plugins) at the same time on systems where there
is a hard limit like on Android.

A better version might re-use the scanner for up to N times, though
it's not clear whether that would actually improve things dramatically.

https://bugzilla.gnome.org/show_bug.cgi?id=662091

gst/gstregistry.c

index 56107c5..ddbb789 100644 (file)
@@ -175,6 +175,8 @@ extern GList *_priv_gst_plugin_paths;
 
 /* Set to TRUE when the registry cache should be disabled */
 gboolean _gst_disable_registry_cache = FALSE;
+
+static gboolean __registry_reuse_plugin_scanner = TRUE;
 #endif
 
 /* Element signals and args */
@@ -1084,6 +1086,11 @@ gst_registry_scan_plugin_file (GstRegistryScanContext * context,
     changed = TRUE;
   }
 
+  if (!__registry_reuse_plugin_scanner) {
+    clear_scan_context (context);
+    context->helper_state = REGISTRY_SCAN_HELPER_NOT_STARTED;
+  }
+
   return changed;
 }
 
@@ -1616,6 +1623,12 @@ ensure_current_registry (GError ** error)
   }
 
   if (do_update) {
+    const gchar *reuse_env;
+
+    if ((reuse_env = g_getenv ("GST_REGISTRY_REUSE_PLUGIN_SCANNER"))) {
+      /* do reuse for any value different from "no" */
+      __registry_reuse_plugin_scanner = (strcmp (reuse_env, "no") != 0);
+    }
     /* now check registry */
     GST_DEBUG ("Updating registry cache");
     scan_and_update_registry (default_registry, registry_file, TRUE, error);