summaryrefslogtreecommitdiff
path: root/dev-python/gst-python/files/gstreamer_compat__ge_pygobject-3.52.3.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/gst-python/files/gstreamer_compat__ge_pygobject-3.52.3.patch')
-rw-r--r--dev-python/gst-python/files/gstreamer_compat__ge_pygobject-3.52.3.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/dev-python/gst-python/files/gstreamer_compat__ge_pygobject-3.52.3.patch b/dev-python/gst-python/files/gstreamer_compat__ge_pygobject-3.52.3.patch
new file mode 100644
index 000000000000..8096dd65c67e
--- /dev/null
+++ b/dev-python/gst-python/files/gstreamer_compat__ge_pygobject-3.52.3.patch
@@ -0,0 +1,68 @@
+From 0496a778bb85e0b263ed2fddfcf3dac7961fe4f5 Mon Sep 17 00:00:00 2001
+From: Matteo Bruni <matteo.bruni@gmail.com>
+Date: Thu, 20 Mar 2025 10:09:21 +0100
+Subject: [PATCH] gst-python: fix compatibility with PyGObject>=3.52.0
+
+PyGObject 3.52.0 moved OverridesProxyModule _introspection_module to __slots__,
+causing Segmentation Faults when accessing the field.
+Since _introspection_module is used to get Gst.Element but is never actually
+used afterward, we fix the issue by removing this part.
+
+Fixes #4314
+
+Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8685>
+---
+ .../gst-python/plugin/gstpythonplugin.c | 23 +------------------
+ 1 file changed, 1 insertion(+), 22 deletions(-)
+
+diff --git a/subprojects/gst-python/plugin/gstpythonplugin.c b/subprojects/gst-python/plugin/gstpythonplugin.c
+index ba2986f265d5..47442bb47e03 100644
+--- a/plugin/gstpythonplugin.c
++++ b/plugin/gstpythonplugin.c
+@@ -53,8 +53,6 @@ gstpy_module_symbol (gpointer handle, const char *name, gpointer * symbol)
+ }
+ #endif
+
+-void *_PyGstElement_Type;
+-
+ GST_DEBUG_CATEGORY_STATIC (pyplugindebug);
+ #define GST_CAT_DEFAULT pyplugindebug
+
+@@ -237,7 +235,7 @@ static gboolean
+ plugin_init (GstPlugin * plugin)
+ {
+ PyGILState_STATE state = 0;
+- PyObject *gi, *require_version, *args, *gst, *dict, *pyplugin;
++ PyObject *gi, *require_version, *args, *gst, *pyplugin;
+ gboolean we_initialized = FALSE;
+ gpointer has_python = NULL;
+ const gchar *override_path;
+@@ -333,25 +331,6 @@ plugin_init (GstPlugin * plugin)
+ }
+
+ if (we_initialized) {
+- PyObject *tmp;
+-
+- dict = PyModule_GetDict (gst);
+- if (!dict) {
+- g_critical ("gi.repository.Gst is no dict");
+- return FALSE;
+- }
+-
+- tmp =
+- PyObject_GetAttr (PyMapping_GetItemString (dict,
+- "_introspection_module"), PyUnicode_FromString ("__dict__"));
+-
+- _PyGstElement_Type = PyMapping_GetItemString (tmp, "Element");
+-
+- if (!_PyGstElement_Type) {
+- g_critical ("Could not get Gst.Element");
+- return FALSE;
+- }
+-
+ pyplugin = pygobject_new (G_OBJECT (plugin));
+ if (!pyplugin || PyModule_AddObject (gst, "__plugin__", pyplugin) != 0) {
+ g_critical ("Couldn't set __plugin__ attribute");
+--
+GitLab
+