felipealmeida pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e14042eabe8821acbb85cb46eb2eb3fbe59a4896

commit e14042eabe8821acbb85cb46eb2eb3fbe59a4896
Author: Larry Jr <larry....@gmail.com>
Date:   Sun Jun 5 20:31:21 2016 -0300

    eio: Fix Eio_Model promise accessor
---
 src/lib/eio/eio_model.c             | 20 +++++++++-----------
 src/tests/eio/eio_model_test_file.c |  6 +++---
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/src/lib/eio/eio_model.c b/src/lib/eio/eio_model.c
index c5436d9..1bbdf11 100644
--- a/src/lib/eio/eio_model.c
+++ b/src/lib/eio/eio_model.c
@@ -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);
 }
 
-void
-_accessor_free(void *data)
-{
-  Eina_Accessor **ac = data;
-  eina_accessor_free(*ac);
-}
-
 /**
  *  Callbacks
  *  Property
@@ -415,7 +408,7 @@ _eio_main_children_load_cb(void *data, Eio_File *handler 
EINA_UNUSED, const Eina
    Eio_Model_Data *priv = data;
    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);
    if (priv->filter_cb)
      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);
        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
          eina_promise_owner_error_set(p->promise, EFL_MODEL_ERROR_NOT_FOUND);
        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)
 {
    eina_spinlock_take(&priv->filter_lock);
-   
+
    priv->filter_cb = filter_cb;
    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
     * 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))
      {
@@ -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);
    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
      eina_promise_owner_error_set(promise, EFL_MODEL_ERROR_NOT_FOUND);
 }
diff --git a/src/tests/eio/eio_model_test_file.c 
b/src/tests/eio/eio_model_test_file.c
index 2c0c712..5ed7d7b 100644
--- a/src/tests/eio/eio_model_test_file.c
+++ b/src/tests/eio/eio_model_test_file.c
@@ -69,13 +69,13 @@ promise_then_count(void *data EINA_UNUSED, void *p)
 static void
 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);
-  printf("efl_model_loaded accessor %p\n", *accessor); fflush(stdout);
+  printf("efl_model_loaded accessor %p\n", accessor); fflush(stdout);
 
   Eo* child;
   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);
     }

-- 


Reply via email to