diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2016-08-19 14:56:49 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2016-08-19 14:56:49 (GMT) |
commit | d042f1f5eb8b7cfacacc4610df73a6e56f2947b5 (patch) | |
tree | 9ca299a99a204c5e28aa4e01a4a97885bd974f75 | |
parent | 64faad6e459c207cd1bce1db2fd9053b44b0a4ac (diff) | |
download | cpython-d042f1f5eb8b7cfacacc4610df73a6e56f2947b5.zip cpython-d042f1f5eb8b7cfacacc4610df73a6e56f2947b5.tar.gz cpython-d042f1f5eb8b7cfacacc4610df73a6e56f2947b5.tar.bz2 |
Cleanup callmethod()
Make callmethod() less weird: don't decrement func reference counter,
the caller is now responsible to do that.
Issue #27128.
-rw-r--r-- | Objects/abstract.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c index 64b8e90..9e9c9aa 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2343,9 +2343,10 @@ callmethod(PyObject* func, const char *format, va_list va, int is_size_t) { PyObject *args, *result; + assert(func != NULL); + if (!PyCallable_Check(func)) { type_error("attribute of type '%.200s' is not callable", func); - Py_XDECREF(func); return NULL; } @@ -2363,7 +2364,6 @@ callmethod(PyObject* func, const char *format, va_list va, int is_size_t) } result = call_function_tail(func, args); - Py_XDECREF(func); Py_DECREF(args); return result; } @@ -2385,6 +2385,7 @@ PyObject_CallMethod(PyObject *o, const char *name, const char *format, ...) va_start(va, format); retval = callmethod(func, format, va, 0); va_end(va); + Py_DECREF(func); return retval; } @@ -2406,6 +2407,7 @@ _PyObject_CallMethodId(PyObject *o, _Py_Identifier *name, va_start(va, format); retval = callmethod(func, format, va, 0); va_end(va); + Py_DECREF(func); return retval; } @@ -2426,6 +2428,7 @@ _PyObject_CallMethod_SizeT(PyObject *o, const char *name, va_start(va, format); retval = callmethod(func, format, va, 1); va_end(va); + Py_DECREF(func); return retval; } @@ -2447,6 +2450,7 @@ _PyObject_CallMethodId_SizeT(PyObject *o, _Py_Identifier *name, va_start(va, format); retval = callmethod(func, format, va, 1); va_end(va); + Py_DECREF(func); return retval; } |