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