From f652b6e18f17e17ef67c5086f1a09944f8dd033f Mon Sep 17 00:00:00 2001 From: Kai Huuhko Date: Tue, 16 Aug 2016 22:56:16 +0300 Subject: [PATCH] Evas.Smart: Store event string in the spec to ensure it doesn't get decreffed This fixes event string corruption and segfault in epymc --- efl/evas/efl.evas_object_smart.pxi | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/efl/evas/efl.evas_object_smart.pxi b/efl/evas/efl.evas_object_smart.pxi index e3aae3b..2e71f66 100644 --- a/efl/evas/efl.evas_object_smart.pxi +++ b/efl/evas/efl.evas_object_smart.pxi @@ -381,6 +381,7 @@ cdef void _smart_object_member_del(Evas_Object *o, Evas_Object *clip) with gil: cdef class _SmartCb: cdef: SmartObject obj + bytes event object(*event_conv)(void*) uintptr_t conv object func @@ -873,6 +874,7 @@ cdef class SmartObject(Object): spec = _SmartCb.__new__(_SmartCb) spec.obj = self + spec.event = event spec.event_conv = event_conv spec.func = func spec.args = args @@ -881,9 +883,9 @@ cdef class SmartObject(Object): lst = self._smart_callback_specs.setdefault(event, []) if not lst: evas_object_smart_callback_add(self.obj, - event, + spec.event, _smart_callback, - event + spec.event ) lst.append(spec)