raster pushed a commit to branch master.

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

commit 2be2c3c6c391b335a93c856df04fad1950639da3
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Wed Aug 21 14:24:21 2019 +0100

    eina list - make eina list magic optional and for now turn it off
    
    this should bring our list nodes back to 32bytes (or 16 on 32bit)
    which is the rounded up libc allocation size anyway expected. less mem
    usage but less safety. i haven't seen any magic complainets to do with
    eina list for a while now... so let's see.
---
 src/lib/eina/eina_list.c | 130 ++++++++++++++++++++++++++++-------------------
 src/lib/eina/eina_list.h |  11 +++-
 2 files changed, 88 insertions(+), 53 deletions(-)

diff --git a/src/lib/eina/eina_list.c b/src/lib/eina/eina_list.c
index a5a6ba79e1..2e7e24cc45 100644
--- a/src/lib/eina/eina_list.c
+++ b/src/lib/eina/eina_list.c
@@ -81,9 +81,10 @@
  * @cond LOCAL
  */
 
-static const char EINA_MAGIC_LIST_STR[] = "Eina List";
 static const char EINA_MAGIC_LIST_ITERATOR_STR[] = "Eina List Iterator";
 static const char EINA_MAGIC_LIST_ACCESSOR_STR[] = "Eina List Accessor";
+#ifdef EINA_LIST_MAGIC
+static const char EINA_MAGIC_LIST_STR[] = "Eina List";
 static const char EINA_MAGIC_LIST_ACCOUNTING_STR[] = "Eina List Accounting";
 
 
@@ -105,6 +106,16 @@ static const char EINA_MAGIC_LIST_ACCOUNTING_STR[] = "Eina 
List Accounting";
           }                                                           \
    } while(0)
 
+#define EINA_MAGIC_CHECK_LIST_ACCOUNTING(d)                     \
+   do {                                                          \
+        if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCOUNTING))       \
+          {                                                           \
+             EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCOUNTING);         \
+             return;                                                 \
+          }                                                           \
+   } while(0)
+#endif
+
 #define EINA_MAGIC_CHECK_LIST_ITERATOR(d, ...)                  \
    do {                                                          \
         if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ITERATOR))         \
@@ -123,14 +134,6 @@ static const char EINA_MAGIC_LIST_ACCOUNTING_STR[] = "Eina 
List Accounting";
           }                                                           \
    } while(0)
 
-#define EINA_MAGIC_CHECK_LIST_ACCOUNTING(d)                     \
-   do {                                                          \
-        if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCOUNTING))       \
-          {                                                           \
-             EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCOUNTING);         \
-             return;                                                 \
-          }                                                           \
-   } while(0)
 
 #define EINA_LIST_SORT_STACK_SIZE 32
 
@@ -143,7 +146,6 @@ struct _Eina_Iterator_List
 
    const Eina_List *head;
    const Eina_List *current;
-
    EINA_MAGIC
 };
 
@@ -155,7 +157,6 @@ struct _Eina_Accessor_List
    const Eina_List *current;
 
    unsigned int index;
-
    EINA_MAGIC
 };
 
@@ -183,9 +184,9 @@ _eina_list_mempool_accounting_new(EINA_UNUSED Eina_List 
*list)
                           sizeof (Eina_List_Accounting));
    if (!tmp)
      return NULL;
-
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST_ACCOUNTING);
-
+#endif
    return tmp;
 }
 
@@ -204,9 +205,10 @@ _eina_list_list_free(void *list)
 static inline void
 _eina_list_mempool_accounting_free(Eina_List_Accounting *accounting)
 {
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST_ACCOUNTING(accounting);
-
    EINA_MAGIC_SET(accounting, EINA_MAGIC_NONE);
+#endif
    eina_freeq_ptr_main_add(accounting, _eina_list_accounting_free, 
sizeof(*accounting));
 }
 
@@ -218,32 +220,35 @@ _eina_list_mempool_list_new(EINA_UNUSED Eina_List *list)
    tmp = eina_mempool_malloc(_eina_list_mp, sizeof (Eina_List));
    if (!tmp)
      return NULL;
-
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_SET(tmp, EINA_MAGIC_LIST);
-
+#endif
    return tmp;
 }
 static inline void
 _eina_list_mempool_list_free(Eina_List *list)
 {
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list);
-
+#endif
    if (list->accounting)
      {
         list->accounting->count--;
         if (list->accounting->count == 0)
           _eina_list_mempool_accounting_free(list->accounting);
      }
-
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_SET(list, EINA_MAGIC_NONE);
+#endif
    eina_freeq_ptr_main_add(list, _eina_list_list_free, sizeof(*list));
 }
 
 static Eina_List *
 _eina_list_setup_accounting(Eina_List *list)
 {
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    list->accounting = _eina_list_mempool_accounting_new(list);
    if (!list->accounting)
      goto on_error;
@@ -261,9 +266,10 @@ on_error:
 static inline void
 _eina_list_update_accounting(Eina_List *list, Eina_List *new_list)
 {
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list);
    EINA_MAGIC_CHECK_LIST(new_list);
-
+#endif
    list->accounting->count++;
    new_list->accounting = list->accounting;
 }
@@ -287,7 +293,6 @@ static Eina_Bool
 eina_list_iterator_next(Eina_Iterator_List *it, void **data)
 {
    EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE);
-
    if (!it->current)
      return EINA_FALSE;
 
@@ -302,7 +307,6 @@ static Eina_Bool
 eina_list_iterator_prev(Eina_Iterator_List *it, void **data)
 {
    EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE);
-
    if (!it->current)
      return EINA_FALSE;
 
@@ -317,7 +321,6 @@ static Eina_List *
 eina_list_iterator_get_container(Eina_Iterator_List *it)
 {
    EINA_MAGIC_CHECK_LIST_ITERATOR(it, NULL);
-
    return (Eina_List *)it->head;
 }
 
@@ -325,7 +328,6 @@ static void
 eina_list_iterator_free(Eina_Iterator_List *it)
 {
    EINA_MAGIC_CHECK_LIST_ITERATOR(it);
-
    MAGIC_FREE(it);
 }
 
@@ -337,7 +339,6 @@ eina_list_accessor_get_at(Eina_Accessor_List *it, unsigned 
int idx, void **data)
    unsigned int i;
 
    EINA_MAGIC_CHECK_LIST_ACCESSOR(it, EINA_FALSE);
-
    if (idx >= eina_list_count(it->head))
      return EINA_FALSE;
 
@@ -395,7 +396,6 @@ static Eina_List *
 eina_list_accessor_get_container(Eina_Accessor_List *it)
 {
    EINA_MAGIC_CHECK_LIST_ACCESSOR(it, NULL);
-
    return (Eina_List *)it->head;
 }
 
@@ -403,7 +403,6 @@ static void
 eina_list_accessor_free(Eina_Accessor_List *it)
 {
    EINA_MAGIC_CHECK_LIST_ACCESSOR(it);
-
    MAGIC_FREE(it);
 }
 
@@ -413,7 +412,6 @@ eina_list_accessor_clone(Eina_Accessor_List *list)
    Eina_Accessor_List *ac;
 
    EINA_MAGIC_CHECK_LIST_ACCESSOR(list, NULL);
-
    EINA_SAFETY_ON_NULL_RETURN_VAL(list, NULL);
 
    ac = calloc(1, sizeof (Eina_Accessor_List));
@@ -429,8 +427,9 @@ eina_list_sort_rebuild_prev(Eina_List *list)
 {
    Eina_List *prev = NULL;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    for (; list; list = list->next)
      {
         list->prev = prev;
@@ -530,10 +529,12 @@ eina_list_init(void)
      }
 
 #define EMS(n) eina_magic_string_static_set(n, n ## _STR)
+#ifdef EINA_LIST_MAGIC
    EMS(EINA_MAGIC_LIST);
+   EMS(EINA_MAGIC_LIST_ACCOUNTING);
+#endif
    EMS(EINA_MAGIC_LIST_ITERATOR);
    EMS(EINA_MAGIC_LIST_ACCESSOR);
-   EMS(EINA_MAGIC_LIST_ACCOUNTING);
 #undef EMS
 
    return EINA_TRUE;
@@ -595,8 +596,9 @@ eina_list_append(Eina_List *list, const void *data)
         return _eina_list_setup_accounting(new_l);
      }
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST_GOTO(list, on_error);
-
+#endif
    l = list->accounting->last;
    list->accounting->last = new_l;
 
@@ -605,8 +607,9 @@ eina_list_append(Eina_List *list, const void *data)
 
    _eina_list_update_accounting(list, new_l);
    return list;
-
+#ifdef EINA_LIST_MAGIC
 on_error:
+#endif
    _eina_list_mempool_list_free(new_l);
    return NULL;
 }
@@ -626,15 +629,18 @@ eina_list_prepend(Eina_List *list, const void *data)
    if (!list)
      return _eina_list_setup_accounting(new_l);
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST_GOTO(list, on_error);
-
+#endif
    list->prev = new_l;
 
    _eina_list_update_accounting(list, new_l);
 
    return new_l;
 
+#ifdef EINA_LIST_MAGIC
 on_error:
+#endif
    _eina_list_mempool_list_free(new_l);
    return NULL;
 }
@@ -647,9 +653,10 @@ eina_list_append_relative(Eina_List *list,
    Eina_List *l;
    void *list_data;
 
+#ifdef EINA_LIST_MAGIC
    if (list)
      EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    EINA_LIST_FOREACH(list, l, list_data)
      {
         if (list_data == relative)
@@ -669,7 +676,9 @@ eina_list_append_relative_list(Eina_List *list,
    if ((!list) || (!relative))
      return eina_list_append(list, data);
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(relative, NULL);
+#endif
 
    new_l = _eina_list_mempool_list_new(list);
    if (!new_l) return list;
@@ -699,9 +708,10 @@ eina_list_prepend_relative(Eina_List *list,
    Eina_List *l;
    void *list_data;
 
+#ifdef EINA_LIST_MAGIC
    if (list)
      EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    EINA_LIST_FOREACH(list, l, list_data)
      {
         if (list_data == relative)
@@ -720,8 +730,9 @@ eina_list_prepend_relative_list(Eina_List *list,
    if ((!list) || (!relative))
      return eina_list_prepend(list, data);
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(relative, NULL);
-
+#endif
    new_l = _eina_list_mempool_list_new(list);
    if (!new_l) return list;
 
@@ -763,9 +774,10 @@ eina_list_remove(Eina_List *list, const void *data)
 {
    Eina_List *l;
 
+#ifdef EINA_LIST_MAGIC
    if (list)
      EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    l = eina_list_data_find_list(list, data);
    return eina_list_remove_list(list, l);
 }
@@ -781,8 +793,9 @@ eina_list_remove_list(Eina_List *list, Eina_List 
*remove_list)
    if (!remove_list)
      return list;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(remove_list, NULL);
-
+#endif
    if (remove_list->next)
      remove_list->next->prev = remove_list->prev;
 
@@ -796,7 +809,9 @@ eina_list_remove_list(Eina_List *list, Eina_List 
*remove_list)
 
    if (remove_list == remove_list->accounting->last)
      {
+#ifdef EINA_LIST_MAGIC
         EINA_MAGIC_CHECK_LIST(list, NULL);
+#endif
         list->accounting->last = remove_list->prev;
      }
 
@@ -812,8 +827,9 @@ eina_list_free(Eina_List *list)
    if (!list)
      return NULL;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    for (l = list; l; )
      {
         free_l = l;
@@ -843,9 +859,10 @@ eina_list_promote_list(Eina_List *list, Eina_List 
*move_list)
    if (move_list->next == list)
      return move_list;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list,      NULL);
    EINA_MAGIC_CHECK_LIST(move_list, NULL);
-
+#endif
    /* Remove the promoted item from the list. */
    if (!move_list->prev)
      move_list->next->prev = NULL;
@@ -883,9 +900,10 @@ eina_list_demote_list(Eina_List *list, Eina_List 
*move_list)
    if (move_list == list->accounting->last)
      return list;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list,      NULL);
    EINA_MAGIC_CHECK_LIST(move_list, NULL);
-
+#endif
    /* Update pointer list if necessary. */
    if (list == move_list)
      {
@@ -924,9 +942,10 @@ eina_list_move(Eina_List **to, Eina_List **from, void 
*data)
    EINA_SAFETY_ON_NULL_RETURN_VAL(from, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
 
+#ifdef EINA_LIST_MAGIC
    if (*to) EINA_MAGIC_CHECK_LIST(*to, EINA_FALSE);
    EINA_MAGIC_CHECK_LIST(*from, EINA_FALSE);
-
+#endif
    l = eina_list_data_find_list(*from, data);
    EINA_SAFETY_ON_NULL_RETURN_VAL(l, EINA_FALSE);
 
@@ -941,10 +960,11 @@ eina_list_move_list(Eina_List **to, Eina_List **from, 
Eina_List *data)
    EINA_SAFETY_ON_NULL_RETURN_VAL(to, EINA_FALSE);
    EINA_SAFETY_ON_NULL_RETURN_VAL(from, EINA_FALSE);
 
+#ifdef EINA_LIST_MAGIC
    if (*to) EINA_MAGIC_CHECK_LIST(*to, EINA_FALSE);
    EINA_MAGIC_CHECK_LIST(*from, EINA_FALSE);
    EINA_MAGIC_CHECK_LIST(data, EINA_FALSE);
-
+#endif
    *to = eina_list_append(*to, data->data);
    *from = eina_list_remove_list(*from, data);
    return EINA_TRUE;
@@ -956,9 +976,10 @@ eina_list_data_find_list(const Eina_List *list, const void 
*data)
    const Eina_List *l;
    void *list_data;
 
+#ifdef EINA_LIST_MAGIC
    if (list)
      EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    EINA_LIST_FOREACH(list, l, list_data)
      {
         if (list_data == data)
@@ -986,9 +1007,10 @@ eina_list_nth_list(const Eina_List *list, unsigned int n)
    const Eina_List *l;
    unsigned int i;
 
+#ifdef EINA_LIST_MAGIC
    if (list)
      EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    /* check for non-existing nodes */
    if ((!list) || (n > (list->accounting->count - 1)))
      return NULL;
@@ -1023,8 +1045,9 @@ eina_list_reverse(Eina_List *list)
    if (!list)
      return NULL;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    l1 = list;
    l2 = list->accounting->last;
    while (l1 != l2)
@@ -1054,8 +1077,9 @@ eina_list_reverse_clone(const Eina_List *list)
    if (!list)
      return NULL;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    lclone = NULL;
    EINA_LIST_FOREACH(list, l, data)
       lclone = eina_list_prepend(lclone, data);
@@ -1073,8 +1097,9 @@ eina_list_clone(const Eina_List *list)
    if (!list)
      return NULL;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    lclone = NULL;
    EINA_LIST_FOREACH(list, l, data)
       lclone = eina_list_append(lclone, data);
@@ -1095,8 +1120,9 @@ eina_list_sort(Eina_List *list, unsigned int limit, 
Eina_Compare_Cb func)
    if (!list)
      return NULL;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    /* if the caller specified an invalid limit, sort the whole list */
    if ((limit == 0) ||
        (limit > list->accounting->count))
@@ -1161,8 +1187,9 @@ eina_list_shuffle(Eina_List *list, Eina_Random_Cb func)
    if (!list)
      return NULL;
 
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, NULL);
-
+#endif
    accounting = list->accounting;
    n = accounting->count;
    shuffled_list = shuffled_last = NULL;
@@ -1623,8 +1650,9 @@ eina_list_data_idx(const Eina_List *list, void *data)
    int ret = 0;
 
    if (!list) return -1;
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC_CHECK_LIST(list, -1);
-
+#endif
    EINA_LIST_FOREACH(list, l, list_data)
      {
         if (list_data == data)
diff --git a/src/lib/eina/eina_list.h b/src/lib/eina/eina_list.h
index 1a2413894f..86892d148d 100644
--- a/src/lib/eina/eina_list.h
+++ b/src/lib/eina/eina_list.h
@@ -23,10 +23,16 @@
 
 #include "eina_config.h"
 
+// magic number checks for eina list nodes - this costs extra memory and a
+// few cycles for some safety = aybe during debugging/devel only?
+//#define EINA_LIST_MAGIC 1
+
 #include "eina_types.h"
 #include "eina_iterator.h"
 #include "eina_accessor.h"
-#include "eina_magic.h"
+#ifdef EINA_LIST_MAGIC
+# include "eina_magic.h"
+#endif
 
 /**
  * @page eina_list_01_example_page Adding elements to Eina_List
@@ -323,8 +329,9 @@ struct _Eina_List
    Eina_List            *next; /**< Next member in the list */
    Eina_List            *prev; /**< Previous member in the list */
    Eina_List_Accounting *accounting; /**< Private list accounting info - don't 
touch */
-
+#ifdef EINA_LIST_MAGIC
    EINA_MAGIC
+#endif
 };
 
 /**

-- 


Reply via email to