eina: alloc ABI2 to reduce risk for futur ABI change.

SVN revision: 58582
This commit is contained in:
Cedric BAIL 2011-04-12 08:52:59 +00:00
parent 892994005b
commit d7800c23e3
2 changed files with 13 additions and 5 deletions

View File

@ -63,7 +63,7 @@ struct _Eina_Mempool
{ {
Eina_Mempool_Backend_ABI1 backend; Eina_Mempool_Backend_ABI1 backend;
void *backend_data; void *backend_data;
Eina_Mempool_Backend_ABI2 backend2; Eina_Mempool_Backend_ABI2 *backend2;
}; };
/** /**

View File

@ -91,8 +91,14 @@ _new_va(const char *name,
SBP(statistics); SBP(statistics);
SBP(shutdown); SBP(shutdown);
#undef SBP #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); mp->backend_data = mp->backend.init(context, options, args);
return mp; return mp;
@ -327,15 +333,17 @@ EAPI void eina_mempool_del(Eina_Mempool *mp)
EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown); EINA_SAFETY_ON_NULL_RETURN(mp->backend.shutdown);
DBG("mp=%p", mp); DBG("mp=%p", mp);
mp->backend.shutdown(mp->backend_data); mp->backend.shutdown(mp->backend_data);
free(mp->backend2);
free(mp); free(mp);
} }
EAPI void eina_mempool_repack(Eina_Mempool *mp, Eina_Mempool_Repack_Cb cb, void *data) 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);
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); 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) EAPI void eina_mempool_gc(Eina_Mempool *mp)