change sertopic "deinit" to "free"

The primary reason is that this allows the implementator of the sertopic
to freely select an allocation strategy, instead of being forced to
allocate the sertopic itself and the names it contains in the common
header with ddsrt_malloc.  The secondary reason is that it brings it in
line with the serdata.

Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
Erik Boasson 2019-05-05 11:25:18 +08:00 committed by eboasson
parent 0a7e5ff8eb
commit 68c21c06e3
4 changed files with 19 additions and 16 deletions

View file

@ -45,9 +45,12 @@ struct ddsi_sertopic *new_sertopic_builtintopic (enum ddsi_sertopic_builtintopic
return &tp->c;
}
static void sertopic_builtin_deinit (struct ddsi_sertopic *tp)
static void sertopic_builtin_free (struct ddsi_sertopic *tp)
{
(void)tp;
ddsrt_free (tp->name_type_name);
ddsrt_free (tp->name);
ddsrt_free (tp->type_name);
ddsrt_free (tp);
}
static void free_pp (void *vsample)
@ -141,7 +144,7 @@ static void sertopic_builtin_free_samples (const struct ddsi_sertopic *sertopic_
}
const struct ddsi_sertopic_ops ddsi_sertopic_ops_builtintopic = {
.deinit = sertopic_builtin_deinit,
.free = sertopic_builtin_free,
.zero_samples = sertopic_builtin_zero_samples,
.realloc_samples = sertopic_builtin_realloc_samples,
.free_samples = sertopic_builtin_free_samples

View file

@ -44,7 +44,7 @@ struct ddsi_sertopic {
};
/* Called when the refcount dropped to zero */
typedef void (*ddsi_sertopic_deinit_t) (struct ddsi_sertopic *tp);
typedef void (*ddsi_sertopic_free_t) (struct ddsi_sertopic *tp);
/* Zero out a sample, used for generating samples from just a key value and in cleaning up
after dds_return_loan */
@ -57,7 +57,7 @@ typedef void (*ddsi_sertopic_realloc_samples_t) (void **ptrs, const struct ddsi_
typedef void (*ddsi_sertopic_free_samples_t) (const struct ddsi_sertopic *d, void **ptrs, size_t count, dds_free_op_t op);
struct ddsi_sertopic_ops {
ddsi_sertopic_deinit_t deinit;
ddsi_sertopic_free_t free;
ddsi_sertopic_zero_samples_t zero_samples;
ddsi_sertopic_realloc_samples_t realloc_samples;
ddsi_sertopic_free_samples_t free_samples;
@ -67,8 +67,8 @@ DDS_EXPORT struct ddsi_sertopic *ddsi_sertopic_ref (const struct ddsi_sertopic *
DDS_EXPORT void ddsi_sertopic_unref (struct ddsi_sertopic *tp);
DDS_EXPORT uint32_t ddsi_sertopic_compute_serdata_basehash (const struct ddsi_serdata_ops *ops);
DDS_EXPORT inline void ddsi_sertopic_deinit (struct ddsi_sertopic *tp) {
tp->ops->deinit (tp);
DDS_EXPORT inline void ddsi_sertopic_free (struct ddsi_sertopic *tp) {
tp->ops->free (tp);
}
DDS_EXPORT inline void ddsi_sertopic_zero_samples (const struct ddsi_sertopic *tp, void *samples, size_t count) {
tp->ops->zero_samples (tp, samples, count);

View file

@ -36,11 +36,7 @@ void ddsi_sertopic_unref (struct ddsi_sertopic *sertopic)
{
if (ddsrt_atomic_dec32_ov (&sertopic->refc) == 1)
{
ddsi_sertopic_deinit (sertopic);
ddsrt_free (sertopic->name_type_name);
ddsrt_free (sertopic->name);
ddsrt_free (sertopic->type_name);
ddsrt_free (sertopic);
ddsi_sertopic_free (sertopic);
}
}
}
@ -58,7 +54,7 @@ uint32_t ddsi_sertopic_compute_serdata_basehash (const struct ddsi_serdata_ops *
return res;
}
extern inline void ddsi_sertopic_deinit (struct ddsi_sertopic *tp);
extern inline void ddsi_sertopic_free (struct ddsi_sertopic *tp);
extern inline void ddsi_sertopic_zero_samples (const struct ddsi_sertopic *tp, void *samples, size_t count);
extern inline void ddsi_sertopic_realloc_samples (void **ptrs, const struct ddsi_sertopic *tp, void *old, size_t oldcount, size_t count);
extern inline void ddsi_sertopic_free_samples (const struct ddsi_sertopic *tp, void **ptrs, size_t count, dds_free_op_t op);

View file

@ -15,6 +15,7 @@
#include <string.h>
#include "dds/ddsrt/md5.h"
#include "dds/ddsrt/heap.h"
#include "dds/ddsi/q_bswap.h"
#include "dds/ddsi/q_config.h"
#include "dds/ddsi/q_freelist.h"
@ -23,9 +24,12 @@
/* FIXME: sertopic /= ddstopic so a lot of stuff needs to be moved here from dds_topic.c and the free function needs to be implemented properly */
static void sertopic_default_deinit (struct ddsi_sertopic *tp)
static void sertopic_default_free (struct ddsi_sertopic *tp)
{
(void)tp;
ddsrt_free (tp->name_type_name);
ddsrt_free (tp->name);
ddsrt_free (tp->type_name);
ddsrt_free (tp);
}
static void sertopic_default_zero_samples (const struct ddsi_sertopic *sertopic_common, void *sample, size_t count)
@ -76,7 +80,7 @@ static void sertopic_default_free_samples (const struct ddsi_sertopic *sertopic_
}
const struct ddsi_sertopic_ops ddsi_sertopic_ops_default = {
.deinit = sertopic_default_deinit,
.free = sertopic_default_free,
.zero_samples = sertopic_default_zero_samples,
.realloc_samples = sertopic_default_realloc_samples,
.free_samples = sertopic_default_free_samples