summaryrefslogtreecommitdiff
path: root/src/lib/eldbus/eldbus_model_proxy.c
diff options
context:
space:
mode:
authorCedric BAIL <cedric.bail@free.fr>2019-02-13 10:46:31 -0800
committerCedric BAIL <cedric.bail@free.fr>2019-03-08 14:31:06 -0800
commit6bb197caa9181f6c2639ecd25649a8237c158dd4 (patch)
tree1bc294f616466547546185dadf4e3202a31ed6ab /src/lib/eldbus/eldbus_model_proxy.c
parent98e5a71974553dced24c6858d61d183ecc5b5b29 (diff)
downloadefl-6bb197caa9181f6c2639ecd25649a8237c158dd4.tar.gz
efl: for consistency and effiency move Efl.Model event to send stringshare like Property_Bind event.
Reviewed-by: Vitor Sousa da Silva <vitorsousa@expertisesolutions.com.br> Differential Revision: https://phab.enlightenment.org/D7946
Diffstat (limited to 'src/lib/eldbus/eldbus_model_proxy.c')
-rw-r--r--src/lib/eldbus/eldbus_model_proxy.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/lib/eldbus/eldbus_model_proxy.c b/src/lib/eldbus/eldbus_model_proxy.c
index 32253e36a7..d571732fc8 100644
--- a/src/lib/eldbus/eldbus_model_proxy.c
+++ b/src/lib/eldbus/eldbus_model_proxy.c
@@ -530,6 +530,7 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode
Eldbus_Message_Iter *values = NULL;
Eldbus_Message_Iter *entry;
Eina_Array *changed_properties;
+ Eina_Stringshare *tmp = NULL;
const char *error_name, *error_text;
if (eldbus_message_error_get(msg, &error_name, &error_text))
@@ -547,7 +548,6 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode
changed_properties = eina_array_new(1);
while (eldbus_message_iter_get_and_next(values, 'e', &entry))
{
- Eina_Stringshare *tmp;
const char *property;
Eldbus_Message_Iter *variant;
Eina_Value *struct_value;
@@ -567,7 +567,6 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode
tmp = eina_stringshare_add(property);
prop_value = eina_hash_find(pd->properties, tmp);
- eina_stringshare_del(tmp);
if (!prop_value) goto on_error;
ret = eina_value_copy(&arg0, prop_value);
@@ -575,14 +574,20 @@ _eldbus_model_proxy_property_get_all_load(const Eldbus_Message *msg, Eldbus_Mode
eina_value_flush(&arg0);
- ret = eina_array_push(changed_properties, property);
+ ret = eina_array_push(changed_properties, tmp);
if (!ret) goto on_error;
+
+ // Reset tmp to NULL to avoid double free.
+ tmp = NULL;
}
pd->is_loaded = EINA_TRUE;
return changed_properties;
on_error:
+ eina_stringshare_del(tmp);
+ while ((tmp = eina_array_pop(changed_properties)))
+ eina_stringshare_del(tmp);
eina_array_free(changed_properties);
return NULL;
}
@@ -603,6 +608,7 @@ _eldbus_model_proxy_property_get_all_cb(void *data,
{
Eldbus_Model_Proxy_Data *pd = (Eldbus_Model_Proxy_Data*)data;
Eldbus_Property_Promise* p;
+ Eina_Stringshare *sp;
Eina_Array *properties;
Efl_Model_Property_Event evt;
@@ -623,6 +629,8 @@ _eldbus_model_proxy_property_get_all_cb(void *data,
evt.changed_properties = properties;
efl_event_callback_call(pd->obj, EFL_MODEL_EVENT_PROPERTIES_CHANGED, &evt);
+ while ((sp = eina_array_pop(properties)))
+ eina_stringshare_del(sp);
eina_array_free(properties);
}
@@ -635,6 +643,7 @@ _eldbus_model_proxy_property_set_load_cb(void *data,
Eldbus_Model_Proxy_Property_Set_Data *set_data = (Eldbus_Model_Proxy_Property_Set_Data *)data;
Eldbus_Model_Proxy_Data *pd = set_data->pd;
Eina_Array *properties;
+ Eina_Stringshare *sp;
const char *signature;
pd->pendings = eina_list_remove(pd->pendings, pending);
@@ -645,16 +654,18 @@ _eldbus_model_proxy_property_set_load_cb(void *data,
if (!signature || !properties)
{
eina_promise_reject(set_data->promise, EFL_MODEL_ERROR_UNKNOWN);
- eina_array_free(properties);
_eldbus_model_proxy_property_set_data_free(set_data);
- return;
+ goto end;
}
- eina_array_free(properties);
pending = eldbus_proxy_property_value_set(pd->proxy, set_data->property,
signature, set_data->value,
_eldbus_model_proxy_property_set_cb, set_data);
pd->pendings = eina_list_append(pd->pendings, pending);
+ end:
+ while ((sp = eina_array_pop(properties)))
+ eina_stringshare_del(sp);
+ eina_array_free(properties);
}