From: "Steven Rostedt (Google)" <rostedt@xxxxxxxxxxx> Add a callback "copy" to the type that gets called when a copy is done. This is can be used to copy dynamic types. Otherwise the old one is just going to be released. Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> --- include/traceeval-hist.h | 5 +++++ src/histograms.c | 3 +++ 2 files changed, 8 insertions(+) diff --git a/include/traceeval-hist.h b/include/traceeval-hist.h index 2fc81a64e324..1a24d6117b93 100644 --- a/include/traceeval-hist.h +++ b/include/traceeval-hist.h @@ -82,6 +82,10 @@ typedef int (*traceeval_data_hash_fn)(struct traceeval *teval, const struct traceeval_type *type, const union traceeval_data *data); +typedef int (*traceeval_data_copy_fn)(const struct traceeval_type *type, + union traceeval_data *copy, + const union traceeval_data *origin); + /* * struct traceeval_type - Describes the type of a traceevent_data instance * @type: The enum type that describes the traceeval_data @@ -126,6 +130,7 @@ struct traceeval_type { size_t id; traceeval_data_release_fn release; traceeval_data_cmp_fn cmp; + traceeval_data_copy_fn copy; traceeval_data_hash_fn hash; }; diff --git a/src/histograms.c b/src/histograms.c index 2b823ad5c26d..f7f72dd3a50b 100644 --- a/src/histograms.c +++ b/src/histograms.c @@ -512,6 +512,9 @@ static int copy_traceeval_data(struct traceeval_type *type, { unsigned long long val; + if (type->copy) + return type->copy(type, copy, orig); + *copy = *orig; switch(type->type) { -- 2.40.1