Methods didn't check for zombies which could crash in the case where a method for an object is kept.
func = ob.getMass ...remove ob... func() # crash 2 More refcount fixes spotted by Benoit too
This commit is contained in:
@@ -225,30 +225,35 @@ typedef struct {
|
||||
#define KX_PYMETHOD(class_name, method_name) \
|
||||
PyObject* Py##method_name(PyObject* args, PyObject* kwds); \
|
||||
static PyObject* sPy##method_name( PyObject* self, PyObject* args, PyObject* kwds) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "() - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args, kwds); \
|
||||
}; \
|
||||
|
||||
#define KX_PYMETHOD_VARARGS(class_name, method_name) \
|
||||
PyObject* Py##method_name(PyObject* args); \
|
||||
static PyObject* sPy##method_name( PyObject* self, PyObject* args) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "() - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args); \
|
||||
}; \
|
||||
|
||||
#define KX_PYMETHOD_NOARGS(class_name, method_name) \
|
||||
PyObject* Py##method_name(); \
|
||||
static PyObject* sPy##method_name( PyObject* self) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "() - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(); \
|
||||
}; \
|
||||
|
||||
#define KX_PYMETHOD_O(class_name, method_name) \
|
||||
PyObject* Py##method_name(PyObject* value); \
|
||||
static PyObject* sPy##method_name( PyObject* self, PyObject* value) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "(value) - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(value); \
|
||||
}; \
|
||||
|
||||
#define KX_PYMETHOD_DOC(class_name, method_name) \
|
||||
PyObject* Py##method_name(PyObject* args, PyObject* kwds); \
|
||||
static PyObject* sPy##method_name( PyObject* self, PyObject* args, PyObject* kwds) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "(...) - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args, kwds); \
|
||||
}; \
|
||||
static const char method_name##_doc[]; \
|
||||
@@ -256,6 +261,7 @@ typedef struct {
|
||||
#define KX_PYMETHOD_DOC_VARARGS(class_name, method_name) \
|
||||
PyObject* Py##method_name(PyObject* args); \
|
||||
static PyObject* sPy##method_name( PyObject* self, PyObject* args) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "(...) - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(args); \
|
||||
}; \
|
||||
static const char method_name##_doc[]; \
|
||||
@@ -263,6 +269,7 @@ typedef struct {
|
||||
#define KX_PYMETHOD_DOC_O(class_name, method_name) \
|
||||
PyObject* Py##method_name(PyObject* value); \
|
||||
static PyObject* sPy##method_name( PyObject* self, PyObject* value) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "(value) - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(value); \
|
||||
}; \
|
||||
static const char method_name##_doc[]; \
|
||||
@@ -270,6 +277,7 @@ typedef struct {
|
||||
#define KX_PYMETHOD_DOC_NOARGS(class_name, method_name) \
|
||||
PyObject* Py##method_name(); \
|
||||
static PyObject* sPy##method_name( PyObject* self) { \
|
||||
if(BGE_PROXY_REF(self)==NULL) { PyErr_SetString(PyExc_SystemError, #class_name "." #method_name "() - " BGE_PROXY_ERROR_MSG); return NULL; } \
|
||||
return ((class_name*)BGE_PROXY_REF(self))->Py##method_name(); \
|
||||
}; \
|
||||
static const char method_name##_doc[]; \
|
||||
|
Reference in New Issue
Block a user