cedric pushed a commit to branch master.

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

commit 435caae51a3ee01c8b55a4c1b944b5537bf20aef
Author: Cedric Bail <cedric.b...@samsung.com>
Date:   Thu Oct 10 17:26:02 2013 +0900

    eo: use Eina_Spinlock instead of Eina_Lock.
    
    This is an ABI/API break for Eo, you will need to rebuild everything that 
use Eo.
---
 src/lib/eo/Eo.h            | 24 ++++++++++++------------
 src/lib/eo/eo.c            | 22 +++++++++++-----------
 src/lib/eo/eo_base_class.c |  8 ++++----
 src/lib/eo/eo_private.h    | 12 ++++++------
 4 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h
index 0e45fd0..fb7ccc2 100644
--- a/src/lib/eo/Eo.h
+++ b/src/lib/eo/Eo.h
@@ -70,7 +70,7 @@ typedef short Eo_Callback_Priority;
  * Don't touch it if you don't know what you are doing.
  * @internal
  */
-EAPI extern Eina_Lock _eo_class_creation_lock;
+EAPI extern Eina_Spinlock _eo_class_creation_lock;
 
 /**
  * @internal
@@ -334,31 +334,31 @@ class_get_func_name(void) \
 { \
    const Eo_Class *_tmp_parent_class; \
    static volatile char lk_init = 0; \
-   static Eina_Lock _my_lock; \
+   static Eina_Spinlock _my_lock; \
    static const Eo_Class * volatile _my_class = NULL; \
    if (EINA_LIKELY(!!_my_class)) return _my_class; \
    \
-   eina_lock_take(&_eo_class_creation_lock); \
+   eina_spinlock_take(&_eo_class_creation_lock); \
    if (!lk_init) \
-      eina_lock_new(&_my_lock); \
-   if (lk_init < 2) eina_lock_take(&_my_lock); \
+      eina_spinlock_new(&_my_lock); \
+   if (lk_init < 2) eina_spinlock_take(&_my_lock); \
    if (!lk_init) \
       lk_init = 1; \
    else \
      { \
-        if (lk_init < 2) eina_lock_release(&_my_lock); \
-        eina_lock_release(&_eo_class_creation_lock); \
+        if (lk_init < 2) eina_spinlock_release(&_my_lock); \
+        eina_spinlock_release(&_eo_class_creation_lock); \
         return _my_class; \
      } \
-   eina_lock_release(&_eo_class_creation_lock); \
+   eina_spinlock_release(&_eo_class_creation_lock); \
    _tmp_parent_class = parent_class; \
    _my_class = eo_class_new(class_desc, _tmp_parent_class, __VA_ARGS__); \
-   eina_lock_release(&_my_lock); \
+   eina_spinlock_release(&_my_lock); \
    \
-   eina_lock_take(&_eo_class_creation_lock); \
-   eina_lock_free(&_my_lock); \
+   eina_spinlock_take(&_eo_class_creation_lock); \
+   eina_spinlock_free(&_my_lock); \
    lk_init = 2; \
-   eina_lock_release(&_eo_class_creation_lock); \
+   eina_spinlock_release(&_eo_class_creation_lock); \
    return _my_class; \
 }
 
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
index b15bd84..3e1d3c1 100644
--- a/src/lib/eo/eo.c
+++ b/src/lib/eo/eo.c
@@ -13,7 +13,7 @@
 #define EO_OP_IDS_FIRST 1
 
 /* Used inside the class_get functions of classes, see #EO_DEFINE_CLASS */
-EAPI Eina_Lock _eo_class_creation_lock;
+EAPI Eina_Spinlock _eo_class_creation_lock;
 int _eo_log_dom = -1;
 
 static _Eo_Class **_eo_classes;
@@ -691,8 +691,8 @@ eo_class_free(_Eo_Class *klass)
    EINA_TRASH_CLEAN(&klass->iterators.trash, data)
       free(data);
 
-   eina_lock_free(&klass->objects.trash_lock);
-   eina_lock_free(&klass->iterators.trash_lock);
+   eina_spinlock_free(&klass->objects.trash_lock);
+   eina_spinlock_free(&klass->iterators.trash_lock);
 
    free(klass);
 }
@@ -889,8 +889,8 @@ eo_class_new(const Eo_Class_Description *desc, const 
Eo_Class *parent_id, ...)
 #ifndef HAVE_EO_ID
    EINA_MAGIC_SET((Eo_Base *) klass, EO_CLASS_EINA_MAGIC);
 #endif
-   eina_lock_new(&klass->objects.trash_lock);
-   eina_lock_new(&klass->iterators.trash_lock);
+   eina_spinlock_new(&klass->objects.trash_lock);
+   eina_spinlock_new(&klass->iterators.trash_lock);
    klass->parent = parent;
    klass->desc = desc;
    klass->extensions = (const _Eo_Class **) ((char *) klass + _eo_class_sz);
@@ -999,7 +999,7 @@ eo_class_new(const Eo_Class_Description *desc, const 
Eo_Class *parent_id, ...)
           }
      }
 
-   eina_lock_take(&_eo_class_creation_lock);
+   eina_spinlock_take(&_eo_class_creation_lock);
    klass->header.id = ++_eo_classes_last_id;
      {
         /* FIXME: Handle errors. */
@@ -1014,7 +1014,7 @@ eo_class_new(const Eo_Class_Description *desc, const 
Eo_Class *parent_id, ...)
         _eo_classes = tmp;
         _eo_classes[klass->header.id - 1] = klass;
      }
-   eina_lock_release(&_eo_class_creation_lock);
+   eina_spinlock_release(&_eo_class_creation_lock);
 
    _eo_class_constructor(klass);
 
@@ -1065,7 +1065,7 @@ eo_add_internal(const char *file, int line, const 
Eo_Class *klass_id, Eo *parent
         return NULL;
      }
 
-   eina_lock_take(&klass->objects.trash_lock);
+   eina_spinlock_take(&klass->objects.trash_lock);
    obj = eina_trash_pop(&klass->objects.trash);
    if (obj)
      {
@@ -1076,7 +1076,7 @@ eo_add_internal(const char *file, int line, const 
Eo_Class *klass_id, Eo *parent
      {
         obj = calloc(1, klass->obj_size);
      }
-   eina_lock_release(&klass->objects.trash_lock);
+   eina_spinlock_release(&klass->objects.trash_lock);
 
    obj->refcount++;
    obj->klass = klass;
@@ -1424,7 +1424,7 @@ eo_init(void)
         return EINA_FALSE;
      }
 
-   if (!eina_lock_new(&_eo_class_creation_lock))
+   if (!eina_spinlock_new(&_eo_class_creation_lock))
      {
         EINA_LOG_ERR("Could not init lock.");
         return EINA_FALSE;
@@ -1471,7 +1471,7 @@ eo_shutdown(void)
    if (_eo_classes)
      free(_eo_classes);
 
-   eina_lock_free(&_eo_class_creation_lock);
+   eina_spinlock_free(&_eo_class_creation_lock);
 
    _eo_free_ids_tables();
 
diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c
index a5a7c62..0e32a99 100644
--- a/src/lib/eo/eo_base_class.c
+++ b/src/lib/eo/eo_base_class.c
@@ -197,7 +197,7 @@ _eo_children_iterator_free(Eo_Children_Iterator *it)
    klass = (_Eo_Class*) it->obj->klass;
    obj = it->obj;
 
-   eina_lock_take(&klass->iterators.trash_lock);
+   eina_spinlock_take(&klass->iterators.trash_lock);
    if (klass->iterators.trash_count < 8)
      {
         klass->iterators.trash_count++;
@@ -207,7 +207,7 @@ _eo_children_iterator_free(Eo_Children_Iterator *it)
      {
         free(it);
      }
-   eina_lock_release(&klass->iterators.trash_lock);
+   eina_spinlock_release(&klass->iterators.trash_lock);
    
    _eo_unref(obj);
 }
@@ -228,7 +228,7 @@ _children_iterator_new(Eo *obj_id, void *class_data, 
va_list *list)
 
    klass = (_Eo_Class *) obj->klass;
 
-   eina_lock_take(&klass->iterators.trash_lock);
+   eina_spinlock_take(&klass->iterators.trash_lock);
    *it = eina_trash_pop(&klass->iterators.trash);
    if (*it)
      {
@@ -239,7 +239,7 @@ _children_iterator_new(Eo *obj_id, void *class_data, 
va_list *list)
      {
         *it = calloc(1, sizeof (Eo_Children_Iterator));
      }
-   eina_lock_release(&klass->iterators.trash_lock);
+   eina_spinlock_release(&klass->iterators.trash_lock);
    if (!*it) return ;
 
    EINA_MAGIC_SET(&(*it)->iterator, EINA_MAGIC_ITERATOR);
diff --git a/src/lib/eo/eo_private.h b/src/lib/eo/eo_private.h
index d276575..1d99768 100644
--- a/src/lib/eo/eo_private.h
+++ b/src/lib/eo/eo_private.h
@@ -143,15 +143,15 @@ struct _Eo_Class
    /* cached object for faster allocation */
    struct {
       Eina_Trash  *trash;
-      Eina_Lock    trash_lock;
+      Eina_Spinlock    trash_lock;
       unsigned int trash_count;
    } objects;
 
    /* cached iterator for faster allocation cycle */
    struct {
-      Eina_Trash  *trash;
-      Eina_Lock    trash_lock;
-      unsigned int trash_count;
+      Eina_Trash   *trash;
+      Eina_Spinlock trash_lock;
+      unsigned int  trash_count;
    } iterators;
 
    unsigned int obj_size; /**< size of an object of this class */
@@ -254,7 +254,7 @@ _eo_free(_Eo_Object *obj)
 #endif
    _eo_id_release((Eo_Id) _eo_id_get(obj));
 
-   eina_lock_take(&klass->objects.trash_lock);
+   eina_spinlock_take(&klass->objects.trash_lock);
    if (klass->objects.trash_count <= 8)
      {
         eina_trash_push(&klass->objects.trash, obj);
@@ -264,7 +264,7 @@ _eo_free(_Eo_Object *obj)
      {
         free(obj);
      }
-   eina_lock_release(&klass->objects.trash_lock);
+   eina_spinlock_release(&klass->objects.trash_lock);
 }
 
 static inline _Eo_Object *

-- 


Reply via email to