From 33a7b72678221ded479935f90b81cfc99eceb08f Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 2 Jun 2015 11:04:56 +1000 Subject: Fix T44919: BGE marhutils attrs leak memory --- source/gameengine/Expressions/PyObjectPlus.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'source/gameengine/Expressions') diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h index 34b814d7416..c3ce98ed27a 100644 --- a/source/gameengine/Expressions/PyObjectPlus.h +++ b/source/gameengine/Expressions/PyObjectPlus.h @@ -111,6 +111,8 @@ typedef struct PyObjectPlus_Proxy { /* Opposite of BGE_PROXY_REF */ #define BGE_PROXY_FROM_REF(_self) (((PyObjectPlus *)_self)->GetProxy()) +/* Same as 'BGE_PROXY_REF' but doesn't incref. */ +#define BGE_PROXY_FROM_REF_BORROW(_self) _bge_proxy_from_ref_borrow((void *)_self) // This must be the first line of each @@ -631,6 +633,17 @@ public: #ifdef WITH_PYTHON PyObject *PyUnicode_From_STR_String(const STR_String& str); + +inline PyObject *_bge_proxy_from_ref_borrow(void *self_v) +{ + PyObject *self_proxy = BGE_PROXY_FROM_REF(self_v); + /* this is typically _very_ bad practice, + * however we know the proxy is owned by 'self_v' */ + self_proxy->ob_refcnt--; + return self_proxy; +} + #endif + #endif /* __PYOBJECTPLUS_H__ */ -- cgit v1.2.3