* eina: easy speed improvement by reducing operation of mempool.
authorcedric <cedric>
Wed, 13 Oct 2010 12:12:45 +0000 (12:12 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 13 Oct 2010 12:12:45 +0000 (12:12 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eina@53349 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/modules/mp/chained_pool/eina_chained_mempool.c

index 658768a..a52d357 100644 (file)
@@ -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);
+                // 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;
              }
-           else
-              // move to front
-              pool->first = eina_inlist_promote(pool->first, EINA_INLIST_GET(p));
-
-           break;
         }
    }