eina: alloc ABI2 to reduce risk for futur ABI change.
authorcedric <cedric>
Tue, 12 Apr 2011 08:52:59 +0000 (08:52 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 12 Apr 2011 08:52:59 +0000 (08:52 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/eina@58582 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/include/eina_inline_mempool.x
src/lib/eina_mempool.c

index e9f20b5..a67ec3d 100644 (file)
@@ -63,7 +63,7 @@ struct _Eina_Mempool
 {
    Eina_Mempool_Backend_ABI1 backend;
    void *backend_data;
-   Eina_Mempool_Backend_ABI2 backend2;
+   Eina_Mempool_Backend_ABI2 *backend2;
 };
 
 /**
index 32a6831..0322eee 100644 (file)
@@ -91,8 +91,14 @@ _new_va(const char *name,
    SBP(statistics);
    SBP(shutdown);
 #undef SBP
-   mp->backend2.repack = be->repack;
-   
+
+   if (be->repack)
+     {
+        mp->backend2 = calloc(1, sizeof (Eina_Mempool_Backend_ABI2));
+        if (mp->backend2)
+          mp->backend2->repack = be->repack;
+     }
+
    mp->backend_data = mp->backend.init(context, options, args);
 
    return mp;
@@ -327,15 +333,17 @@ EAPI void eina_mempool_del(Eina_Mempool *mp)
    EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
    DBG("mp=%p", mp);
    mp->backend.shutdown(mp->backend_data);
+   free(mp->backend2);
    free(mp);
 }
 
 EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data)
 {
    EINA_SAFETY_ON_NULL_RETURN(mp);
-   EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
+   EINA_SAFETY_ON_NULL_RETURN(mp->backend2);
+   EINA_SAFETY_ON_NULL_RETURN(mp->backend2->repack);
    DBG("mp=%p", mp);
-   mp->backend2.repack(mp->backend_data, cb, data);
+   mp->backend2->repack(mp->backend_data, cb, data);
 }
 
 EAPI void eina_mempool_gc(Eina_Mempool *mp)