Dear all,

When i run 'store' menu in elementary_test, i met some segfault.
it's due to inappropriate eina_lock ptr handling.

Thanks
Index: elementary/src/lib/elm_store.c
===================================================================
--- elementary/src/lib/elm_store.c      (리비전 67007)
+++ elementary/src/lib/elm_store.c      (작업 사본)
@@ -47,7 +47,7 @@
    Ecore_Job                    *eval_job;
    const Elm_Store_Item_Mapping *mapping;
    void                         *data;
-   Eina_Lock                    *lock;
+   Eina_Lock                     lock;
    Eina_Bool                     live : 1;
    Eina_Bool                     was_live : 1;
    Eina_Bool                     realized : 1;
@@ -82,24 +82,24 @@
              st->realized = eina_list_remove_list(st->realized, st->realized);
              sti->realized = EINA_FALSE;
           }
-        eina_lock_take(sti->lock);
+        eina_lock_take(&sti->lock);
         if (!sti->fetched)
           {
-             eina_lock_release(sti->lock);
+             eina_lock_release(&sti->lock);
              if (sti->fetch_th)
                {
                   ecore_thread_cancel(sti->fetch_th);
                   sti->fetch_th = NULL;
                }
-             eina_lock_take(sti->lock);
+             eina_lock_take(&sti->lock);
           }
         sti->fetched = EINA_FALSE;
-        eina_lock_release(sti->lock);
+        eina_lock_release(&sti->lock);
         if (st->cb.unfetch.func)
           st->cb.unfetch.func(st->cb.unfetch.data, sti);
-        eina_lock_take(sti->lock);
+        eina_lock_take(&sti->lock);
         sti->data = NULL;
-        eina_lock_release(sti->lock);
+        eina_lock_release(&sti->lock);
      }
 }
 
@@ -130,7 +130,7 @@
                st->cb.unfetch.func(st->cb.unfetch.data, sti);
              sti->data = NULL;
           }
-        eina_lock_free(sti->lock);
+        eina_lock_free(&sti->lock);
        st->items = NULL;
         free(sti);
      }
@@ -145,21 +145,21 @@
 _store_filesystem_fetch_do(void *data, Ecore_Thread *th __UNUSED__)
 {
    Elm_Store_Item *sti = data;
-   eina_lock_take(sti->lock);
+   eina_lock_take(&sti->lock);
    if (sti->data)
      {
-        eina_lock_release(sti->lock);
+        eina_lock_release(&sti->lock);
         return;
      }
    if (!sti->fetched)
      {
-        eina_lock_release(sti->lock);
+        eina_lock_release(&sti->lock);
         if (sti->store->cb.fetch.func)
           sti->store->cb.fetch.func(sti->store->cb.fetch.data, sti);
-        eina_lock_take(sti->lock);
+        eina_lock_take(&sti->lock);
         sti->fetched = EINA_TRUE;
      }
-   eina_lock_release(sti->lock);
+   eina_lock_release(&sti->lock);
 }
 //     ************************************************************************
 ////   * End of separate thread function.                                     *
@@ -169,9 +169,9 @@
 _store_filesystem_fetch_end(void *data, Ecore_Thread *th)
 {
    Elm_Store_Item *sti = data;
-   eina_lock_take(sti->lock);
+   eina_lock_take(&sti->lock);
    if (sti->data) elm_genlist_item_update(sti->item);
-   eina_lock_release(sti->lock);
+   eina_lock_release(&sti->lock);
    if (th == sti->fetch_th) sti->fetch_th = NULL;
 }
 
@@ -180,10 +180,10 @@
 _store_filesystem_fetch_cancel(void *data, Ecore_Thread *th)
 {
    Elm_Store_Item *sti = data;
-   eina_lock_take(sti->lock);
+   eina_lock_take(&sti->lock);
    if (th == sti->fetch_th) sti->fetch_th = NULL;
    if (sti->data) elm_genlist_item_update(sti->item);
-   eina_lock_release(sti->lock);
+   eina_lock_release(&sti->lock);
 }
 
 static void
@@ -266,7 +266,7 @@
 {
    Elm_Store_Item *sti = data;
    const char *s = "";
-   eina_lock_take(sti->lock);
+   eina_lock_take(&sti->lock);
    if (sti->data)
      {
         const Elm_Store_Item_Mapping *m = _store_item_mapping_find(sti, part);
@@ -286,7 +286,7 @@
                }
           }
      }
-   eina_lock_release(sti->lock);
+   eina_lock_release(&sti->lock);
    return s ? strdup(s) : NULL;
 }
 
@@ -294,7 +294,7 @@
 _store_item_content_get(void *data, Evas_Object *obj, const char *part)
 {
    Elm_Store_Item *sti = data;
-   eina_lock_take(sti->lock);
+   eina_lock_take(&sti->lock);
    if (sti->data)
      {
         const Elm_Store_Item_Mapping *m = _store_item_mapping_find(sti, part);
@@ -340,11 +340,11 @@
                 default:
                    break;
                }
-             eina_lock_release(sti->lock);
+             eina_lock_release(&sti->lock);
              return ic;
           }
      }
-   eina_lock_release(sti->lock);
+   eina_lock_release(&sti->lock);
    return NULL;
 }
 
@@ -442,7 +442,7 @@
 
    sti = calloc(1, sizeof(Elm_Store_Item_Filesystem));
    if (!sti) goto done;
-   eina_lock_new(sti->base.lock);
+   eina_lock_new(&sti->base.lock);
    EINA_MAGIC_SET(&(sti->base), ELM_STORE_ITEM_MAGIC);
    sti->base.store = st;
    sti->base.data = info->base.data;
@@ -553,7 +553,7 @@
                st->cb.unfetch.func(st->cb.unfetch.data, sti);
              sti->data = NULL;
           }
-        eina_lock_free(sti->lock);
+        eina_lock_free(&sti->lock);
         free(sti);
      }
    if (st->genlist)
@@ -688,9 +688,9 @@
 elm_store_item_data_set(Elm_Store_Item *sti, void *data)
 {
    if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return;
-   eina_lock_take(sti->lock);
+   eina_lock_take(&sti->lock);
    sti->data = data;
-   eina_lock_release(sti->lock);
+   eina_lock_release(&sti->lock);
 }
 
 EAPI void *
@@ -698,9 +698,9 @@
 {
    if (!EINA_MAGIC_CHECK(sti, ELM_STORE_ITEM_MAGIC)) return NULL;
    void *d;
-   eina_lock_take(sti->lock);
+   eina_lock_take(&sti->lock);
    d = sti->data;
-   eina_lock_release(sti->lock);
+   eina_lock_release(&sti->lock);
    return d;
 }
 
------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create 
new or port existing apps to sell to consumers worldwide. Explore the 
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to