summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2019-08-09 01:03:17 +0200
committerMathieu Duponchelle <mduponchelle1@gmail.com>2019-08-08 23:35:16 +0000
commit34e0e3ce1113a3b6e50ec6e9cd76d4b205c7c100 (patch)
tree71e94331ecc58514f3086ccb03f8853dc3047e46
parent42a27817bc6d31292754fa6187ef8f7f00aab15f (diff)
overrides: fix callback setter overrides
Use weakref to avoid leaks, and remove refcount hack as the actual issue has been fixed in pygobject
-rw-r--r--gi/overrides/Gst.py14
1 files changed, 4 insertions, 10 deletions
diff --git a/gi/overrides/Gst.py b/gi/overrides/Gst.py
index bd4cd3b..414a0ad 100644
--- a/gi/overrides/Gst.py
+++ b/gi/overrides/Gst.py
@@ -27,6 +27,7 @@
import sys
import inspect
import itertools
+import weakref
from ..overrides import override
from ..module import get_introspection_module
@@ -153,7 +154,6 @@ class Pad(Gst.Pad):
return self._real_event_func(pad, event)
def _query_override(self, pad, parent, query):
- query.mini_object.refcount -= 1
try:
res = self._real_query_func(pad, query)
except TypeError:
@@ -162,25 +162,20 @@ class Pad(Gst.Pad):
except TypeError:
raise TypeError("Invalid query method %s, 2 or 3 arguments required"
% self._real_query_func)
- query.mini_object.refcount += 1
return res
def set_chain_function(self, func):
self._real_chain_func = func
- self.set_chain_function_full(self._chain_override, None)
+ self.set_chain_function_full(weakref.WeakMethod(self._chain_override), None)
def set_event_function(self, func):
self._real_event_func = func
- self.set_event_function_full(self._event_override, None)
+ self.set_event_function_full(weakref.WeakMethod(func), None)
def set_query_function(self, func):
self._real_query_func = func
- self.set_query_function_full(self._query_override, None)
-
- def set_query_function_full(self, func, udata):
- self._real_query_func = func
- self._real_set_query_function_full(self._query_override, None)
+ self.set_query_function_full(weakref.WeakMethod(self._query_override), None)
def query_caps(self, filter=None):
return Gst.Pad.query_caps(self, filter)
@@ -207,7 +202,6 @@ class Pad(Gst.Pad):
raise LinkError(ret)
return ret
-Pad._real_set_query_function_full = Gst.Pad.set_query_function_full
Pad = override(Pad)
__all__.append('Pad')