Commit bbedab4e authored by Edward Hervey's avatar Edward Hervey 🤘

registry: fix deadlock with recursive registry scanning.

The way to properly fix this issue was in fact to disable the registry
scanning when we import gst from the python plugin loader since...
we are 100% guaranteed this is being called from a registry scan :)
parent 4d8b4c8d
......@@ -190,11 +190,6 @@ try:
except:
pass
# disable registry update during initialization
import os
doupdate = os.getenv("GST_REGISTRY_UPDATE") != "no"
os.environ["GST_REGISTRY_UPDATE"] = "no"
from _gst import *
import interfaces
......@@ -232,8 +227,3 @@ if gstlibtoolimporter is not None:
gstlibtoolimporter.uninstall()
import sys
del sys.modules["gstlibtoolimporter"]
if doupdate:
# update the registry now that we've loaded all symbols
os.unsetenv("GST_REGISTRY_UPDATE")
update_registry()
......@@ -253,6 +253,8 @@ pygst_require (gchar * version)
PyObject *pygst, *gst;
PyObject *require;
PyObject *modules;
gboolean doupdate = TRUE;
const gchar *regupd;
modules = PySys_GetObject ("modules");
/* Try to see if 'gst' is already imported */
......@@ -273,12 +275,25 @@ pygst_require (gchar * version)
goto error;
}
}
/* We don't want the registry to be loaded when we import gst */
if ((regupd = g_getenv ("GST_REGISTRY_UPDATE"))
&& (!g_strcmp0 (regupd, "no")))
doupdate = FALSE;
g_setenv ("GST_REGISTRY_UPDATE", "no", TRUE);
if (!(gst = PyImport_ImportModule ("gst"))) {
GST_ERROR ("couldn't import the gst module");
Py_DECREF (pygst);
if (doupdate)
g_unsetenv ("GST_REGISTRY_UPDATE");
goto error;
}
}
if (doupdate)
g_unsetenv ("GST_REGISTRY_UPDATE");
#define IMPORT(x, y) \
_PyGst##x##_Type = (PyTypeObject *)PyObject_GetAttrString(gst, y); \
if (_PyGst##x##_Type == NULL) { \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment