lib: use object pool for event and packet notifications
[babeltrace.git] / lib / graph / notification / notification.c
index 9dc64d796dcfe99060bcca9877ec8b0928c50359..0bcfb7dfbdacf225ba6f6898b1d105f5aba6f8e3 100644 (file)
  * SOFTWARE.
  */
 
+#define BT_LOG_TAG "NOTIF"
+#include <babeltrace/lib-logging-internal.h>
+
 #include <babeltrace/graph/notification-internal.h>
+#include <babeltrace/graph/graph-internal.h>
+#include <babeltrace/assert-internal.h>
+#include <babeltrace/assert-pre-internal.h>
+
+BT_ASSERT_PRE_FUNC
+static inline void _init_seq_num(struct bt_notification *notification)
+{
+       notification->seq_num = UINT64_C(-1);
+}
+
+#ifdef BT_DEV_MODE
+# define init_seq_num  _init_seq_num
+#else
+# define init_seq_num(_notif)
+#endif /* BT_DEV_MODE */
 
 BT_HIDDEN
 void bt_notification_init(struct bt_notification *notification,
                enum bt_notification_type type,
-               bt_object_release_func release)
+               bt_object_release_func release,
+               struct bt_graph *graph)
 {
-       assert(type > BT_NOTIFICATION_TYPE_ALL &&
-                       type < BT_NOTIFICATION_TYPE_NR);
+       BT_ASSERT(type >= 0 && type < BT_NOTIFICATION_TYPE_NR);
        notification->type = type;
+       init_seq_num(notification);
        bt_object_init(&notification->base, release);
+       notification->graph = graph;
+
+       if (graph) {
+               bt_graph_add_notification(graph, notification);
+       }
 }
 
 enum bt_notification_type bt_notification_get_type(
                struct bt_notification *notification)
 {
-       return notification ? notification->type : BT_NOTIFICATION_TYPE_UNKNOWN;
+       BT_ASSERT_PRE_NON_NULL(notification, "Notification");
+       return notification->type;
 }
 
-struct bt_ctf_stream *bt_notification_get_stream(
-               struct bt_notification *notification)
+BT_HIDDEN
+void bt_notification_unlink_graph(struct bt_notification *notif)
 {
-       struct bt_ctf_stream *stream = NULL;
-
-       if (!notification || !notification->get_stream) {
-               goto end;
-       }
-
-       stream = notification->get_stream(notification);
-end:
-       return stream;
+       BT_ASSERT(notif);
+       notif->graph = NULL;
 }
This page took 0.025639 seconds and 4 git commands to generate.