[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53706] trunk/blender/source/blender/ python/intern/bpy_props.c: Another fix for bpy.props getters/setters: PyC_AsArray does a refcount decrement internally on errors, need to skip Py_DECREF in that case to avoid negative refcounts.

Lukas Toenne lukas.toenne at googlemail.com
Thu Jan 10 15:36:09 CET 2013


Revision: 53706
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53706
Author:   lukastoenne
Date:     2013-01-10 14:36:08 +0000 (Thu, 10 Jan 2013)
Log Message:
-----------
Another fix for bpy.props getters/setters: PyC_AsArray does a refcount decrement internally on errors, need to skip Py_DECREF in that case to avoid negative refcounts.

Modified Paths:
--------------
    trunk/blender/source/blender/python/intern/bpy_props.c

Modified: trunk/blender/source/blender/python/intern/bpy_props.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_props.c	2013-01-10 14:28:06 UTC (rev 53705)
+++ trunk/blender/source/blender/python/intern/bpy_props.c	2013-01-10 14:36:08 UTC (rev 53706)
@@ -388,14 +388,17 @@
 			values[i] = false;
 	}
 	else {
-		if (ret && PyC_AsArray(values, ret, len, &PyBool_Type, false, "BoolVectorProperty get") < 0) {
+		if (PyC_AsArray(values, ret, len, &PyBool_Type, false, "BoolVectorProperty get") < 0) {
 			printf_func_error(py_func);
 
 			for (i = 0; i < len; ++i)
 				values[i] = false;
+
+			/* PyC_AsArray decrements refcount internally on error */
 		}
-
-		Py_DECREF(ret);
+		else {
+			Py_DECREF(ret);
+		}
 	}
 
 	if (use_gil)
@@ -619,14 +622,17 @@
 			values[i] = 0;
 	}
 	else {
-		if (ret && PyC_AsArray(values, ret, len, &PyLong_Type, false, "IntVectorProperty get") < 0) {
+		if (PyC_AsArray(values, ret, len, &PyLong_Type, false, "IntVectorProperty get") < 0) {
 			printf_func_error(py_func);
 
 			for (i = 0; i < len; ++i)
 				values[i] = 0;
+
+			/* PyC_AsArray decrements refcount internally on error */
 		}
-
-		Py_DECREF(ret);
+		else {
+			Py_DECREF(ret);
+		}
 	}
 
 	if (use_gil)
@@ -850,14 +856,17 @@
 			values[i] = 0.0f;
 	}
 	else {
-		if (ret && PyC_AsArray(values, ret, len, &PyFloat_Type, false, "FloatVectorProperty get") < 0) {
+		if (PyC_AsArray(values, ret, len, &PyFloat_Type, false, "FloatVectorProperty get") < 0) {
 			printf_func_error(py_func);
 
 			for (i = 0; i < len; ++i)
 				values[i] = 0.0f;
+
+			/* PyC_AsArray decrements refcount internally on error */
 		}
-
-		Py_DECREF(ret);
+		else {
+			Py_DECREF(ret);
+		}
 	}
 
 	if (use_gil)




More information about the Bf-blender-cvs mailing list