[Bf-blender-cvs] [dac5396] blender-v2.78-release: Fix T49797: Exception from scene update handler might leak external engine descriptors

Sergey Sharybin noreply at git.blender.org
Mon Oct 24 12:34:33 CEST 2016


Commit: dac53963a84f0e256027819035e848ec2eb568ef
Author: Sergey Sharybin
Date:   Thu Oct 20 13:32:52 2016 +0200
Branches: blender-v2.78-release
https://developer.blender.org/rBdac53963a84f0e256027819035e848ec2eb568ef

Fix T49797: Exception from scene update handler might leak external engine descriptors

This was causing memory leaks in Cycles.

Some more detailed information in the comment in the code.

Seems to be safe and nice enough for 2.78a.

===================================================================

M	source/blender/python/intern/bpy_app_handlers.c

===================================================================

diff --git a/source/blender/python/intern/bpy_app_handlers.c b/source/blender/python/intern/bpy_app_handlers.c
index 6a8b0b0..1cc2d6f 100644
--- a/source/blender/python/intern/bpy_app_handlers.c
+++ b/source/blender/python/intern/bpy_app_handlers.c
@@ -317,7 +317,13 @@ void bpy_app_generic_callback(struct Main *UNUSED(main), struct ID *id, void *ar
 			func = PyList_GET_ITEM(cb_list, pos);
 			ret = PyObject_Call(func, args, NULL);
 			if (ret == NULL) {
-				PyErr_Print();
+				/* Don't set last system variables because they might cause some
+				 * dangling pointers to external render engines (when exception
+				 * happens during rendering) which will break logic of render pipeline
+				 * which expects to be the only user of render engine when rendering
+				 * is finished.
+				 */
+				PyErr_PrintEx(0);
 				PyErr_Clear();
 			}
 			else {




More information about the Bf-blender-cvs mailing list