pushing released serdata:s onto a freelist was dropped by accident in the rewriting of them

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
Erik Boasson 2018-11-09 15:29:40 +01:00
parent 29f542b916
commit ef65101ad7

View file

@ -53,9 +53,9 @@ static void serdata_free_wrap (void *elem)
{ {
#ifndef NDEBUG #ifndef NDEBUG
struct ddsi_serdata_default *d = elem; struct ddsi_serdata_default *d = elem;
assert(os_atomic_ld32(&d->c.refc) == 1); assert(os_atomic_ld32(&d->c.refc) == 0);
#endif #endif
ddsi_serdata_unref(elem); dds_free(elem);
} }
void ddsi_serdatapool_free (struct serdatapool * pool) void ddsi_serdatapool_free (struct serdatapool * pool)
@ -200,7 +200,9 @@ static bool serdata_default_eqkey_nokey (const struct ddsi_serdata *acmn, const
static void serdata_default_free(struct ddsi_serdata *dcmn) static void serdata_default_free(struct ddsi_serdata *dcmn)
{ {
struct ddsi_serdata_default *d = (struct ddsi_serdata_default *)dcmn; struct ddsi_serdata_default *d = (struct ddsi_serdata_default *)dcmn;
dds_free (d); assert(os_atomic_ld32(&d->c.refc) == 0);
if (!nn_freelist_push (&gv.serpool->freelist, d))
dds_free (d);
} }
static void serdata_default_init(struct ddsi_serdata_default *d, const struct ddsi_sertopic_default *tp, enum ddsi_serdata_kind kind) static void serdata_default_init(struct ddsi_serdata_default *d, const struct ddsi_sertopic_default *tp, enum ddsi_serdata_kind kind)
@ -231,6 +233,8 @@ static struct ddsi_serdata_default *serdata_default_new(const struct ddsi_sertop
struct ddsi_serdata_default *d; struct ddsi_serdata_default *d;
if ((d = nn_freelist_pop (&gv.serpool->freelist)) == NULL) if ((d = nn_freelist_pop (&gv.serpool->freelist)) == NULL)
d = serdata_default_allocnew(gv.serpool); d = serdata_default_allocnew(gv.serpool);
else
os_atomic_st32(&d->c.refc, 1);
serdata_default_init(d, tp, kind); serdata_default_init(d, tp, kind);
return d; return d;
} }