[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