[Bf-blender-cvs] [8473bee9090] refactor-idprop-ui-data: Free unused result in failure cases
Hans Goudey
noreply at git.blender.org
Thu Aug 5 21:01:51 CEST 2021
Commit: 8473bee9090afac37270e54065ee522f8a1c63ad
Author: Hans Goudey
Date: Thu Aug 5 13:52:28 2021 -0500
Branches: refactor-idprop-ui-data
https://developer.blender.org/rB8473bee9090afac37270e54065ee522f8a1c63ad
Free unused result in failure cases
===================================================================
M source/blender/blenkernel/BKE_idprop.h
M source/blender/blenkernel/intern/idprop.c
M source/blender/python/generic/idprop_py_ui_api.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_idprop.h b/source/blender/blenkernel/BKE_idprop.h
index 63da6e429a5..a6372cc490c 100644
--- a/source/blender/blenkernel/BKE_idprop.h
+++ b/source/blender/blenkernel/BKE_idprop.h
@@ -230,6 +230,7 @@ typedef enum eIDPropertyUIDataType {
bool IDP_ui_data_supported(const struct IDProperty *prop);
eIDPropertyUIDataType IDP_ui_data_type(const struct IDProperty *prop);
void IDP_ui_data_free(struct IDProperty *prop);
+void IDP_ui_data_free_contents(struct IDPropertyUIData *ui_data, const eIDPropertyUIDataType type);
struct IDPropertyUIData *IDP_ui_data_ensure(struct IDProperty *prop);
struct IDPropertyUIData *IDP_ui_data_copy(const struct IDProperty *prop);
diff --git a/source/blender/blenkernel/intern/idprop.c b/source/blender/blenkernel/intern/idprop.c
index e5a48127d01..777effca003 100644
--- a/source/blender/blenkernel/intern/idprop.c
+++ b/source/blender/blenkernel/intern/idprop.c
@@ -1096,25 +1096,25 @@ IDProperty *IDP_New(const char type, const IDPropertyTemplate *val, const char *
return prop;
}
-void IDP_ui_data_free(IDProperty *prop)
+void IDP_ui_data_free_contents(IDPropertyUIData *ui_data, const eIDPropertyUIDataType type)
{
- switch (IDP_ui_data_type(prop)) {
+ switch (type) {
case IDP_UI_DATA_TYPE_STRING: {
- IDPropertyUIDataString *ui_data = (IDPropertyUIDataString *)prop->ui_data;
- MEM_SAFE_FREE(ui_data->default_value);
+ IDPropertyUIDataString *ui_data_string = (IDPropertyUIDataString *)ui_data;
+ MEM_SAFE_FREE(ui_data_string->default_value);
break;
}
case IDP_UI_DATA_TYPE_ID: {
break;
}
case IDP_UI_DATA_TYPE_INT: {
- IDPropertyUIDataInt *ui_data = (IDPropertyUIDataInt *)prop->ui_data;
- MEM_SAFE_FREE(ui_data->default_array);
+ IDPropertyUIDataInt *ui_data_int = (IDPropertyUIDataInt *)ui_data;
+ MEM_SAFE_FREE(ui_data_int->default_array);
break;
}
case IDP_UI_DATA_TYPE_FLOAT: {
- IDPropertyUIDataFloat *ui_data = (IDPropertyUIDataFloat *)prop->ui_data;
- MEM_SAFE_FREE(ui_data->default_array);
+ IDPropertyUIDataFloat *ui_data_float = (IDPropertyUIDataFloat *)ui_data;
+ MEM_SAFE_FREE(ui_data_float->default_array);
break;
}
case IDP_UI_DATA_TYPE_UNSUPPORTED: {
@@ -1122,7 +1122,13 @@ void IDP_ui_data_free(IDProperty *prop)
}
}
- MEM_SAFE_FREE(prop->ui_data->description);
+ MEM_SAFE_FREE(ui_data->description);
+}
+
+void IDP_ui_data_free(IDProperty *prop)
+{
+ IDP_ui_data_free_contents(prop->ui_data, IDP_ui_data_type(prop));
+
MEM_freeN(prop->ui_data);
prop->ui_data = NULL;
}
diff --git a/source/blender/python/generic/idprop_py_ui_api.c b/source/blender/python/generic/idprop_py_ui_api.c
index 51f9e33fb04..c43d2067f8e 100644
--- a/source/blender/python/generic/idprop_py_ui_api.c
+++ b/source/blender/python/generic/idprop_py_ui_api.c
@@ -148,6 +148,7 @@ static bool idprop_ui_data_update_int(IDProperty *idprop, PyObject *args, PyObje
IDPropertyUIDataInt ui_data = *(IDPropertyUIDataInt *)idprop->ui_data;
if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+ IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_INT);
return false;
}
@@ -177,6 +178,7 @@ static bool idprop_ui_data_update_int(IDProperty *idprop, PyObject *args, PyObje
if (!ELEM(default_value, NULL, Py_None)) {
if (!idprop_ui_data_update_int_default(idprop, &ui_data, default_value)) {
+ IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_INT);
return false;
}
}
@@ -264,6 +266,7 @@ static bool idprop_ui_data_update_float(IDProperty *idprop, PyObject *args, PyOb
IDPropertyUIDataFloat ui_data = *(IDPropertyUIDataFloat *)idprop->ui_data;
if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+ IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_FLOAT);
return false;
}
@@ -298,6 +301,7 @@ static bool idprop_ui_data_update_float(IDProperty *idprop, PyObject *args, PyOb
* value or an array, but for non-array properties it can only be a value. */
if (!ELEM(default_value, NULL, Py_None)) {
if (!idprop_ui_data_update_float_default(idprop, &ui_data, default_value)) {
+ IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_FLOAT);
return false;
}
}
@@ -330,6 +334,7 @@ static bool idprop_ui_data_update_string(IDProperty *idprop, PyObject *args, PyO
IDPropertyUIDataString ui_data = *(IDPropertyUIDataString *)idprop->ui_data;
if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+ IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_STRING);
return false;
}
@@ -360,6 +365,7 @@ static bool idprop_ui_data_update_id(IDProperty *idprop, PyObject *args, PyObjec
IDPropertyUIDataID ui_data = *(IDPropertyUIDataID *)idprop->ui_data;
if (!idprop_ui_data_update_base((IDPropertyUIData *)&ui_data, rna_subtype, description)) {
+ IDP_ui_data_free_contents((IDPropertyUIData *)&ui_data, IDP_UI_DATA_TYPE_ID);
return false;
}
More information about the Bf-blender-cvs
mailing list