lib: trace IR, values: reset pointers to `NULL` on destruction
[babeltrace.git] / lib / trace-ir / event.c
index ed42d0a2eabbf525def895d61dfab7b7c7227944..7d31a40162b67734511b477ed34ec0113dd124d9 100644 (file)
@@ -1,8 +1,4 @@
 /*
- * event.c
- *
- * Babeltrace trace IR - Event
- *
  * Copyright 2013, 2014 Jérémie Galarneau <jeremie.galarneau@efficios.com>
  *
  * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
@@ -36,6 +32,7 @@
 #include <babeltrace/trace-ir/clock-value.h>
 #include <babeltrace/trace-ir/clock-value-internal.h>
 #include <babeltrace/trace-ir/clock-class-internal.h>
+#include <babeltrace/trace-ir/private-event.h>
 #include <babeltrace/trace-ir/event-internal.h>
 #include <babeltrace/trace-ir/event-class.h>
 #include <babeltrace/trace-ir/event-class-internal.h>
@@ -47,7 +44,7 @@
 #include <babeltrace/trace-ir/trace.h>
 #include <babeltrace/trace-ir/trace-internal.h>
 #include <babeltrace/trace-ir/packet-internal.h>
-#include <babeltrace/ref.h>
+#include <babeltrace/object.h>
 #include <babeltrace/trace-ir/attributes-internal.h>
 #include <babeltrace/compiler-internal.h>
 #include <babeltrace/assert-internal.h>
@@ -220,24 +217,48 @@ struct bt_field *bt_event_borrow_header_field(struct bt_event *event)
        return event->header_field ? event->header_field->field : NULL;
 }
 
+struct bt_private_field *bt_private_event_borrow_header_field(
+               struct bt_private_event *event)
+{
+       return (void *) bt_event_borrow_header_field((void *) event);
+}
+
 struct bt_field *bt_event_borrow_common_context_field(struct bt_event *event)
 {
        BT_ASSERT_PRE_NON_NULL(event, "Event");
        return event->common_context_field;
 }
 
+struct bt_private_field *bt_private_event_borrow_common_context_field(
+               struct bt_private_event *event)
+{
+       return (void *) bt_event_borrow_common_context_field((void *) event);
+}
+
 struct bt_field *bt_event_borrow_specific_context_field(struct bt_event *event)
 {
        BT_ASSERT_PRE_NON_NULL(event, "Event");
        return event->specific_context_field;
 }
 
+struct bt_private_field *bt_private_event_borrow_specific_context_field(
+               struct bt_private_event *event)
+{
+       return (void *) bt_event_borrow_specific_context_field((void *) event);
+}
+
 struct bt_field *bt_event_borrow_payload_field(struct bt_event *event)
 {
        BT_ASSERT_PRE_NON_NULL(event, "Event");
        return event->payload_field;
 }
 
+struct bt_private_field *bt_private_event_borrow_payload_field(
+               struct bt_private_event *event)
+{
+       return (void *) bt_event_borrow_payload_field((void *) event);
+}
+
 static
 void release_event_header_field(struct bt_field_wrapper *field_wrapper,
                struct bt_event *event)
@@ -262,38 +283,44 @@ void bt_event_destroy(struct bt_event *event)
        if (event->header_field) {
                BT_LOGD_STR("Releasing event's header field.");
                release_event_header_field(event->header_field, event);
+               event->header_field = NULL;
        }
 
        if (event->common_context_field) {
                BT_LOGD_STR("Destroying event's stream event context field.");
                bt_field_destroy(event->common_context_field);
+               event->common_context_field = NULL;
        }
 
        if (event->specific_context_field) {
                BT_LOGD_STR("Destroying event's context field.");
                bt_field_destroy(event->specific_context_field);
+               event->specific_context_field = NULL;
        }
 
        if (event->payload_field) {
                BT_LOGD_STR("Destroying event's payload field.");
                bt_field_destroy(event->payload_field);
+               event->payload_field = NULL;
        }
 
        BT_LOGD_STR("Putting event's class.");
-       bt_put(event->class);
+       bt_object_put_ref(event->class);
 
        if (event->default_cv) {
                bt_clock_value_recycle(event->default_cv);
+               event->default_cv = NULL;
        }
 
        BT_LOGD_STR("Putting event's packet.");
-       bt_put(event->packet);
+       BT_OBJECT_PUT_REF_AND_RESET(event->packet);
        g_free(event);
 }
 
-int bt_event_set_default_clock_value(struct bt_event *event,
-               uint64_t value_cycles)
+void bt_private_event_set_default_clock_value(
+               struct bt_private_event *priv_event, uint64_t value_cycles)
 {
+       struct bt_event *event = (void *) priv_event;
        struct bt_stream_class *sc;
 
        BT_ASSERT_PRE_NON_NULL(event, "Event");
@@ -307,7 +334,6 @@ int bt_event_set_default_clock_value(struct bt_event *event,
        bt_clock_value_set_value_inline(event->default_cv, value_cycles);
        BT_LIB_LOGV("Set event's default clock value: %![event-]+e, "
                "value=%" PRIu64, event, value_cycles);
-       return 0;
 }
 
 enum bt_clock_value_status bt_event_borrow_default_clock_value(
@@ -325,11 +351,20 @@ struct bt_packet *bt_event_borrow_packet(struct bt_event *event)
        return event->packet;
 }
 
-int bt_event_move_header(struct bt_event *event,
-               struct bt_event_header_field *header_field)
+struct bt_private_packet *bt_private_event_borrow_packet(
+               struct bt_private_event *event)
+{
+       return (void *) bt_event_borrow_packet((void *) event);
+}
+
+int bt_private_event_move_header_field(
+               struct bt_private_event *priv_event,
+               struct bt_private_event_header_field *priv_header_field)
 {
        struct bt_stream_class *stream_class;
-       struct bt_field_wrapper *field_wrapper = (void *) header_field;
+       struct bt_event *event = (void *) priv_event;
+       struct bt_event_class *event_class = (void *) event_class;
+       struct bt_field_wrapper *field_wrapper = (void *) priv_header_field;
 
        BT_ASSERT_PRE_NON_NULL(event, "Event");
        BT_ASSERT_PRE_NON_NULL(field_wrapper, "Header field");
This page took 0.024723 seconds and 4 git commands to generate.