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:
parent
0a7e5ff8eb
commit
68c21c06e3
4 changed files with 19 additions and 16 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue