Commit 80b331cb authored by Georg Brandl's avatar Georg Brandl

Fix refleaks in function objects caused by kwdefaults not being allocated.

Should func_new be extended to support a "kwdefaults" arg?
parent 257d3d93
...@@ -413,7 +413,7 @@ func_set_kwdefaults(PyFunctionObject *op, PyObject *value) ...@@ -413,7 +413,7 @@ func_set_kwdefaults(PyFunctionObject *op, PyObject *value)
if (value == Py_None) if (value == Py_None)
value = NULL; value = NULL;
/* Legal to del f.func_defaults. /* Legal to del f.func_kwdefaults.
* Can only set func_kwdefaults to NULL or a dict. */ * Can only set func_kwdefaults to NULL or a dict. */
if (value != NULL && !PyDict_Check(value)) { if (value != NULL && !PyDict_Check(value)) {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
...@@ -587,6 +587,7 @@ func_dealloc(PyFunctionObject *op) ...@@ -587,6 +587,7 @@ func_dealloc(PyFunctionObject *op)
Py_XDECREF(op->func_module); Py_XDECREF(op->func_module);
Py_DECREF(op->func_name); Py_DECREF(op->func_name);
Py_XDECREF(op->func_defaults); Py_XDECREF(op->func_defaults);
Py_XDECREF(op->func_kwdefaults);
Py_XDECREF(op->func_doc); Py_XDECREF(op->func_doc);
Py_XDECREF(op->func_dict); Py_XDECREF(op->func_dict);
Py_XDECREF(op->func_closure); Py_XDECREF(op->func_closure);
...@@ -609,6 +610,7 @@ func_traverse(PyFunctionObject *f, visitproc visit, void *arg) ...@@ -609,6 +610,7 @@ func_traverse(PyFunctionObject *f, visitproc visit, void *arg)
Py_VISIT(f->func_globals); Py_VISIT(f->func_globals);
Py_VISIT(f->func_module); Py_VISIT(f->func_module);
Py_VISIT(f->func_defaults); Py_VISIT(f->func_defaults);
Py_VISIT(f->func_kwdefaults);
Py_VISIT(f->func_doc); Py_VISIT(f->func_doc);
Py_VISIT(f->func_name); Py_VISIT(f->func_name);
Py_VISIT(f->func_dict); Py_VISIT(f->func_dict);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment