eio: Fix Eio_Model promise accessor

This commit is contained in:
Larry Jr 2016-06-05 20:31:21 -03:00 committed by Felipe Magno de Almeida
parent 217f3ce842
commit e14042eabe
2 changed files with 12 additions and 14 deletions

View File

@ -26,13 +26,6 @@ _eio_stat_do(Eio_Model_Data *priv)
priv->stat_file = eio_file_direct_stat(priv->path, _eio_stat_done_cb, _eio_error_cb, priv); priv->stat_file = eio_file_direct_stat(priv->path, _eio_stat_done_cb, _eio_error_cb, priv);
} }
void
_accessor_free(void *data)
{
Eina_Accessor **ac = data;
eina_accessor_free(*ac);
}
/** /**
* Callbacks * Callbacks
* Property * Property
@ -415,7 +408,7 @@ _eio_main_children_load_cb(void *data, Eio_File *handler EINA_UNUSED, const Eina
Eio_Model_Data *priv = data; Eio_Model_Data *priv = data;
EINA_SAFETY_ON_NULL_RETURN(priv); EINA_SAFETY_ON_NULL_RETURN(priv);
child = eo_add(MY_CLASS, NULL, eio_model_path_set(eo_self, info->path)); child = eo_add_ref(MY_CLASS, priv->obj, eio_model_path_set(eo_self, info->path));
eina_spinlock_take(&priv->filter_lock); eina_spinlock_take(&priv->filter_lock);
if (priv->filter_cb) if (priv->filter_cb)
eio_model_children_filter_set(child, priv->filter_cb, priv->filter_userdata); eio_model_children_filter_set(child, priv->filter_cb, priv->filter_userdata);
@ -441,7 +434,7 @@ _eio_done_children_load_cb(void *data, Eio_File *handler EINA_UNUSED)
{ {
Eina_Accessor* accessor = efl_model_list_slice(priv->children_list, p->start, p->count); Eina_Accessor* accessor = efl_model_list_slice(priv->children_list, p->start, p->count);
if (accessor) if (accessor)
eina_promise_owner_value_set(p->promise, &accessor, &_accessor_free); eina_promise_owner_value_set(p->promise, accessor, (Eina_Promise_Free_Cb)&eina_accessor_free);
else else
eina_promise_owner_error_set(p->promise, EFL_MODEL_ERROR_NOT_FOUND); eina_promise_owner_error_set(p->promise, EFL_MODEL_ERROR_NOT_FOUND);
free(p); free(p);
@ -467,7 +460,7 @@ static void
_eio_model_children_filter_set(Eo *obj EINA_UNUSED, Eio_Model_Data *priv, Eio_Filter_Direct_Cb filter_cb, void *data) _eio_model_children_filter_set(Eo *obj EINA_UNUSED, Eio_Model_Data *priv, Eio_Filter_Direct_Cb filter_cb, void *data)
{ {
eina_spinlock_take(&priv->filter_lock); eina_spinlock_take(&priv->filter_lock);
priv->filter_cb = filter_cb; priv->filter_cb = filter_cb;
priv->filter_userdata = data; priv->filter_userdata = data;
@ -530,6 +523,11 @@ _eio_model_efl_model_children_slice_get(Eo *obj EINA_UNUSED, Eio_Model_Data *pri
* children must be already loaded otherwise we do nothing * children must be already loaded otherwise we do nothing
* and parameter is set to NULL. * and parameter is set to NULL.
*/ */
if (!priv->path)
{
eina_promise_owner_error_set(promise, EFL_MODEL_ERROR_INIT_FAILED);
return;
}
if (!(priv->is_listed)) if (!(priv->is_listed))
{ {
@ -555,7 +553,7 @@ _eio_model_efl_model_children_slice_get(Eo *obj EINA_UNUSED, Eio_Model_Data *pri
Eina_Accessor* accessor = efl_model_list_slice(priv->children_list, start, count); Eina_Accessor* accessor = efl_model_list_slice(priv->children_list, start, count);
if (accessor) if (accessor)
eina_promise_owner_value_set(promise, &accessor, &_accessor_free); eina_promise_owner_value_set(promise, accessor, (Eina_Promise_Free_Cb)&eina_accessor_free);
else else
eina_promise_owner_error_set(promise, EFL_MODEL_ERROR_NOT_FOUND); eina_promise_owner_error_set(promise, EFL_MODEL_ERROR_NOT_FOUND);
} }

View File

@ -69,13 +69,13 @@ promise_then_count(void *data EINA_UNUSED, void *p)
static void static void
promise_then_accessor(void *data EINA_UNUSED, void* p) promise_then_accessor(void *data EINA_UNUSED, void* p)
{ {
Eina_Accessor **accessor = (Eina_Accessor**)p; Eina_Accessor *accessor = p;
ck_assert_ptr_ne(accessor, NULL); ck_assert_ptr_ne(accessor, NULL);
printf("efl_model_loaded accessor %p\n", *accessor); fflush(stdout); printf("efl_model_loaded accessor %p\n", accessor); fflush(stdout);
Eo* child; Eo* child;
int i = 0; int i = 0;
EINA_ACCESSOR_FOREACH(*accessor, i, child) EINA_ACCESSOR_FOREACH(accessor, i, child)
{ {
printf("efl_model_loaded child: %d pointer %p\n", i, child); printf("efl_model_loaded child: %d pointer %p\n", i, child);
} }