/*
- * Babeltrace Plug-in Notification
- *
+ * Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
* Copyright 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
*
- * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
- *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* SOFTWARE.
*/
+#define BT_LOG_TAG "NOTIF"
+#include <babeltrace/lib-logging-internal.h>
+
+#include <babeltrace/assert-internal.h>
+#include <babeltrace/assert-pre-internal.h>
+#include <babeltrace/graph/notification-const.h>
#include <babeltrace/graph/notification-internal.h>
+#include <babeltrace/graph/graph-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_PACKET_END);
notification->type = type;
- bt_object_init(¬ification->base, release);
+ init_seq_num(notification);
+ bt_object_init_shared(¬ification->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)
+ const 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;
+ BT_ASSERT(notif);
+ notif->graph = NULL;
+}
- if (!notification || !notification->get_stream) {
- goto end;
- }
+void bt_notification_get_ref(const struct bt_notification *notification)
+{
+ bt_object_get_ref(notification);
+}
- stream = notification->get_stream(notification);
-end:
- return stream;
+void bt_notification_put_ref(const struct bt_notification *notification)
+{
+ bt_object_put_ref(notification);
}