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:
parent
29f542b916
commit
ef65101ad7
1 changed files with 7 additions and 3 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue