From 2f0e395f67cc9e3d280b743602be37201fabc840 Mon Sep 17 00:00:00 2001 From: Wim Lavrijsen <WLavrijsen@lbl.gov> Date: Thu, 9 Dec 2010 22:33:17 +0000 Subject: [PATCH] possible fix for https://savannah.cern.ch/bugs/index.php?73419 git-svn-id: http://root.cern.ch/svn/root/trunk@37462 27541ba8-7e3a-0410-8455-c3a389f83636 --- bindings/pyroot/src/MethodProxy.cxx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bindings/pyroot/src/MethodProxy.cxx b/bindings/pyroot/src/MethodProxy.cxx index a7bdb62d3f2..13db6cd00b3 100644 --- a/bindings/pyroot/src/MethodProxy.cxx +++ b/bindings/pyroot/src/MethodProxy.cxx @@ -92,6 +92,15 @@ namespace { ((ObjectProxy*)result)->HoldOn(); } + // if this new object falls inside self, make sure its lifetime is proper + if ( pymeth->fSelf && ObjectProxy_Check( result ) ) { + Long_t ptrdiff = (Long_t)((ObjectProxy*)result)->GetObject() - (Long_t)pymeth->fSelf->GetObject(); + if ( 0 <= ptrdiff && ptrdiff < (Long_t)pymeth->fSelf->ObjectIsA()->Size() ) { + if ( PyObject_SetAttr( result, PyStrings::gLifeLine, (PyObject*)pymeth->fSelf ) == -1 ) + PyErr_Clear(); // ignored + } + } + return result; } -- GitLab