Fix massive memory leak with object_hook and list_hook when unpacking.

This commit is contained in:
Steeve Morin 2012-02-28 15:36:58 +01:00
parent 3a472b1624
commit 31b7fda17b

View file

@ -161,8 +161,10 @@ static inline int template_callback_array_end(unpack_user* u, msgpack_unpack_obj
{
if (u->list_hook) {
PyObject *arglist = Py_BuildValue("(O)", *c);
*c = PyEval_CallObject(u->list_hook, arglist);
msgpack_unpack_object *new_c = PyEval_CallObject(u->list_hook, arglist);
Py_DECREF(arglist);
Py_DECREF(*c);
*c = new_c;
}
return 0;
}
@ -190,8 +192,10 @@ static inline int template_callback_map_end(unpack_user* u, msgpack_unpack_objec
{
if (u->object_hook) {
PyObject *arglist = Py_BuildValue("(O)", *c);
*c = PyEval_CallObject(u->object_hook, arglist);
msgpack_unpack_object *new_c = PyEval_CallObject(u->object_hook, arglist);
Py_DECREF(arglist);
Py_DECREF(*c);
*c = new_c;
}
return 0;
}