From 70e1e46a61e9bbe49eb43c360ced144c0492579f Mon Sep 17 00:00:00 2001 From: David Rose Date: Wed, 10 Jun 2009 14:33:44 +0000 Subject: [PATCH] coercion memory leak fix, part 1 --- dtool/src/interrogate/interfaceMakerPythonNative.cxx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dtool/src/interrogate/interfaceMakerPythonNative.cxx b/dtool/src/interrogate/interfaceMakerPythonNative.cxx index 2c358d8e63..152463f7c7 100755 --- a/dtool/src/interrogate/interfaceMakerPythonNative.cxx +++ b/dtool/src/interrogate/interfaceMakerPythonNative.cxx @@ -2680,10 +2680,6 @@ write_function_instance(ostream &out, InterfaceMaker::Object *obj, } string return_expr = remap->call_function(out, extra_indent_level, true, container, pexprs); - if (coercion_possible) { - indent(out, extra_indent_level) - << "Py_XDECREF(coerced);\n"; - } if (return_expr.empty()) { if (track_interpreter) { indent(out,extra_indent_level) << "in_interpreter = 1;\n"; @@ -2697,6 +2693,10 @@ write_function_instance(ostream &out, InterfaceMaker::Object *obj, if (!extra_cleanup.empty()) { indent(out,extra_indent_level) << extra_cleanup << "\n"; } + if (coercion_possible) { + indent(out, extra_indent_level) + << "Py_XDECREF(coerced);\n"; + } do_assert_init(out, extra_indent_level,is_constructor); indent(out,extra_indent_level) << "return Py_BuildValue(\"\");\n"; @@ -2723,6 +2723,10 @@ write_function_instance(ostream &out, InterfaceMaker::Object *obj, if (!is_inplace) { return_expr = manage_return_value(out, extra_indent_level, remap, "return_value"); } + if (coercion_possible) { + indent(out, extra_indent_level) + << "Py_XDECREF(coerced);\n"; + } do_assert_init(out, extra_indent_level,is_constructor); pack_return_value(out, extra_indent_level, remap, remap->_return_type->temporary_to_return(return_expr),ForwardDeclrs,is_inplace); }