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 e8a7981ac2c0..a87f39afc050 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 *dst, + const union traceeval_data *src); + /* * 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 c4ff632b4f87..08d711239284 100644 --- a/src/histograms.c +++ b/src/histograms.c @@ -511,6 +511,9 @@ static int copy_traceeval_data(struct traceeval_type *type, { unsigned long long val; + if (type->copy) + return type->copy(type, dst, src); + *dst = *src; switch(type->type) { -- 2.40.1