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