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.

This commit is contained in:
Lukas Toenne
2013-01-10 14:36:08 +00:00
parent 983e5fe5f1
commit 127b5423d6

View File

@@ -388,15 +388,18 @@ static void bpy_prop_boolean_array_get_cb(struct PointerRNA *ptr, struct Propert
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 */
}
else {
Py_DECREF(ret);
}
}
if (use_gil)
PyGILState_Release(gilstate);
@@ -619,15 +622,18 @@ static void bpy_prop_int_array_get_cb(struct PointerRNA *ptr, struct PropertyRNA
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 */
}
else {
Py_DECREF(ret);
}
}
if (use_gil)
PyGILState_Release(gilstate);
@@ -850,15 +856,18 @@ static void bpy_prop_float_array_get_cb(struct PointerRNA *ptr, struct PropertyR
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 */
}
else {
Py_DECREF(ret);
}
}
if (use_gil)
PyGILState_Release(gilstate);