#include <babeltrace/graph/port.h>
#include <babeltrace/types.h>
#include <stdint.h>
+#include <stdlib.h>
struct stream_state {
struct bt_ctf_stream *stream; /* owned by this */
case ACTION_TYPE_SET_STREAM_STATE_IS_ENDED:
break;
default:
- assert(BT_FALSE);
+ abort();
}
}
action->payload.set_stream_state_cur_packet.packet);
break;
default:
- assert(BT_FALSE);
+ abort();
}
}
}
default:
/* Unreachable */
- assert(0);
+ abort();
}
if (finalize_method) {
iter_notif_type = BT_NOTIFICATION_ITERATOR_NOTIF_TYPE_PACKET_END;
break;
default:
- assert(BT_FALSE);
+ abort();
}
return iter_notif_type;
assert(iterator);
BT_LOGD("Ensuring that notification iterator's queue has at least one notification: "
- "iter-addr=%p, queue-size=%u",
- iterator, iterator->queue->length);
+ "iter-addr=%p, queue-size=%u, iter-state=%s",
+ iterator, iterator->queue->length,
+ bt_notification_iterator_state_string(iterator->state));
if (iterator->queue->length > 0) {
- /* We already have enough */
+ /*
+ * We already have enough. Even if this notification
+ * iterator is finalized, its user can still flush its
+ * current queue's content by calling its "next" method
+ * since this content is local and has no impact on what
+ * used to be the iterator's upstream component.
+ */
BT_LOGD_STR("Queue already has at least one notification.");
goto end;
}
switch (iterator->state) {
case BT_NOTIFICATION_ITERATOR_STATE_FINALIZED_AND_ENDED:
+ case BT_NOTIFICATION_ITERATOR_STATE_FINALIZED:
BT_LOGD_STR("Notification iterator's \"next\" called, but it is finalized.");
status = BT_NOTIFICATION_ITERATOR_STATUS_CANCELED;
goto end;
break;
}
default:
- assert(BT_FALSE);
- break;
+ abort();
}
/*
goto end;
}
- if (iterator->state == BT_NOTIFICATION_ITERATOR_STATE_FINALIZED) {
- iterator->state =
- BT_NOTIFICATION_ITERATOR_STATE_FINALIZED_AND_ENDED;
-
- if (iterator->queue->length == 0) {
- status = BT_NOTIFICATION_ITERATOR_STATUS_CANCELED;
- }
- } else {
- iterator->state =
- BT_NOTIFICATION_ITERATOR_STATE_ENDED;
+ assert(iterator->state ==
+ BT_NOTIFICATION_ITERATOR_STATE_ACTIVE);
+ iterator->state = BT_NOTIFICATION_ITERATOR_STATE_ENDED;
- if (iterator->queue->length == 0) {
- status = BT_NOTIFICATION_ITERATOR_STATUS_END;
- }
+ if (iterator->queue->length == 0) {
+ status = BT_NOTIFICATION_ITERATOR_STATUS_END;
}
BT_LOGD("Set new status: status=%s",
break;
default:
/* Unknown non-error status */
- assert(BT_FALSE);
+ abort();
}
}