ippair/storage: use flex array instead of calculated ptr

pull/9939/head
Victor Julien 2 years ago committed by Victor Julien
parent 3d3a62dfe6
commit 11d73e284c

@ -34,28 +34,28 @@ unsigned int IPPairStorageSize(void)
void *IPPairGetStorageById(IPPair *h, IPPairStorageId id) void *IPPairGetStorageById(IPPair *h, IPPairStorageId id)
{ {
return StorageGetById((Storage *)((void *)h + sizeof(IPPair)), STORAGE_IPPAIR, id.id); return StorageGetById(h->storage, STORAGE_IPPAIR, id.id);
} }
int IPPairSetStorageById(IPPair *h, IPPairStorageId id, void *ptr) int IPPairSetStorageById(IPPair *h, IPPairStorageId id, void *ptr)
{ {
return StorageSetById((Storage *)((void *)h + sizeof(IPPair)), STORAGE_IPPAIR, id.id, ptr); return StorageSetById(h->storage, STORAGE_IPPAIR, id.id, ptr);
} }
void *IPPairAllocStorageById(IPPair *h, IPPairStorageId id) void *IPPairAllocStorageById(IPPair *h, IPPairStorageId id)
{ {
return StorageAllocByIdPrealloc((Storage *)((void *)h + sizeof(IPPair)), STORAGE_IPPAIR, id.id); return StorageAllocByIdPrealloc(h->storage, STORAGE_IPPAIR, id.id);
} }
void IPPairFreeStorageById(IPPair *h, IPPairStorageId id) void IPPairFreeStorageById(IPPair *h, IPPairStorageId id)
{ {
StorageFreeById((Storage *)((void *)h + sizeof(IPPair)), STORAGE_IPPAIR, id.id); StorageFreeById(h->storage, STORAGE_IPPAIR, id.id);
} }
void IPPairFreeStorage(IPPair *h) void IPPairFreeStorage(IPPair *h)
{ {
if (IPPairStorageSize() > 0) if (IPPairStorageSize() > 0)
StorageFreeAll((Storage *)((void *)h + sizeof(IPPair)), STORAGE_IPPAIR); StorageFreeAll(h->storage, STORAGE_IPPAIR);
} }
IPPairStorageId IPPairStorageRegister(const char *name, const unsigned int size, IPPairStorageId IPPairStorageRegister(const char *name, const unsigned int size,

@ -65,9 +65,6 @@ typedef struct IPPair_ {
/** use cnt, reference counter */ /** use cnt, reference counter */
SC_ATOMIC_DECLARE(unsigned int, use_cnt); SC_ATOMIC_DECLARE(unsigned int, use_cnt);
/** storage api handle */
Storage *storage;
/** hash pointers, protected by hash row mutex/spin */ /** hash pointers, protected by hash row mutex/spin */
struct IPPair_ *hnext; struct IPPair_ *hnext;
struct IPPair_ *hprev; struct IPPair_ *hprev;
@ -75,6 +72,9 @@ typedef struct IPPair_ {
/** list pointers, protected by ippair-queue mutex/spin */ /** list pointers, protected by ippair-queue mutex/spin */
struct IPPair_ *lnext; struct IPPair_ *lnext;
struct IPPair_ *lprev; struct IPPair_ *lprev;
/** storage api handle as a flex array member, so must stay last */
Storage storage[];
} IPPair; } IPPair;
typedef struct IPPairHashRow_ { typedef struct IPPairHashRow_ {

Loading…
Cancel
Save