From a44992380ff1c98c2d4ac3de7637dd42a2544363 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Wed, 13 Oct 2010 12:12:45 +0000 Subject: [PATCH] * eina: easy speed improvement by reducing operation of mempool. SVN revision: 53349 --- .../mp/chained_pool/eina_chained_mempool.c | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/legacy/eina/src/modules/mp/chained_pool/eina_chained_mempool.c b/legacy/eina/src/modules/mp/chained_pool/eina_chained_mempool.c index 658768ab3c..a52d357111 100644 --- a/legacy/eina/src/modules/mp/chained_pool/eina_chained_mempool.c +++ b/legacy/eina/src/modules/mp/chained_pool/eina_chained_mempool.c @@ -218,28 +218,31 @@ eina_chained_mempool_free(void *data, void *ptr) EINA_INLIST_FOREACH(pool->first, p) { - // pool mem base - pmem = (void *)(((unsigned char *)p) + sizeof(Chained_Pool)); - // is it in pool mem? - if ((ptr >= pmem) && - ((unsigned char *)ptr < (((unsigned char *)pmem) + psize))) + // Could the pointer be inside that pool + if (ptr < p->limit) { - // freed node points to prev free node - eina_trash_push(&p->base, ptr); - // next free node is now the one we freed - p->usage--; - pool->usage--; - if (p->usage == 0) + // pool mem base + pmem = (void *)(((unsigned char *)p) + sizeof(Chained_Pool)); + // is it in pool mem? + if (ptr >= pmem) { - // free bucket - pool->first = eina_inlist_remove(pool->first, EINA_INLIST_GET(p)); - _eina_chained_mp_pool_free(p); - } - else - // move to front - pool->first = eina_inlist_promote(pool->first, EINA_INLIST_GET(p)); + // freed node points to prev free node + eina_trash_push(&p->base, ptr); + // next free node is now the one we freed + p->usage--; + pool->usage--; + if (p->usage == 0) + { + // free bucket + pool->first = eina_inlist_remove(pool->first, EINA_INLIST_GET(p)); + _eina_chained_mp_pool_free(p); + } + else + // move to front + pool->first = eina_inlist_promote(pool->first, EINA_INLIST_GET(p)); - break; + break; + } } }