X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Ftraceset.c;h=181bdd53430de5739316262bc618ebc1e29a2d40;hb=ba017bc3146fe853e1f894c9828b8a08fc21e6ca;hp=aa5364881be925d777514635237c7905b0ac600d;hpb=d8f124de0295aea546b6debf5945bfeea2bbeb2a;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/traceset.c b/ltt/branches/poly/lttv/lttv/traceset.c index aa536488..181bdd53 100644 --- a/ltt/branches/poly/lttv/lttv/traceset.c +++ b/ltt/branches/poly/lttv/lttv/traceset.c @@ -16,8 +16,12 @@ * MA 02111-1307, USA. */ +#ifdef HAVE_CONFIG_H +#include +#endif #include +#include #include /* A trace is a sequence of events gathered in the same tracing session. The @@ -70,7 +74,7 @@ LttvTrace *lttv_trace_new(LttTrace *t) LttvTraceset *lttv_traceset_copy(LttvTraceset *s_orig) { - int i; + guint i; LttvTraceset *s; LttvTrace * trace; @@ -82,11 +86,8 @@ LttvTraceset *lttv_traceset_copy(LttvTraceset *s_orig) trace = g_ptr_array_index(s_orig->traces, i); trace->ref_count++; - /*CHECK this used ltt_trace_copy while it may not be needed. Need to - define how traces and tracesets are shared */ - g_ptr_array_add( - s->traces, - g_ptr_array_index(s_orig->traces, i)); + g_ptr_array_add(s->traces, + trace); } s->a = LTTV_ATTRIBUTE(lttv_iattribute_deep_copy(LTTV_IATTRIBUTE(s_orig->a))); return s; @@ -121,6 +122,14 @@ gint lttv_traceset_save(LttvTraceset *s) void lttv_traceset_destroy(LttvTraceset *s) { + guint i; + + for(i=0;itraces->len;i++) { + LttvTrace *trace = g_ptr_array_index(s->traces, i); + lttv_trace_unref(trace); + if(lttv_trace_get_ref_number(trace) == 0) + lttv_trace_destroy(trace); + } g_ptr_array_free(s->traces, TRUE); g_object_unref(s->a); g_free(s); @@ -187,3 +196,19 @@ guint lttv_trace_get_ref_number(LttvTrace * t) { return t->ref_count; } + +guint lttv_trace_ref(LttvTrace * t) +{ + t->ref_count++; + + return t->ref_count; +} + +guint lttv_trace_unref(LttvTrace * t) +{ + if(likely(t->ref_count > 0)) + t->ref_count--; + + return t->ref_count; +} +