lib: make can_seek_beginning and can_seek_ns_from_origin methods return a status
[babeltrace.git] / src / plugins / utils / trimmer / trimmer.c
index c821e0b41e75b269d1f45858d15c3cc12837408f..4d39fba27cdbd662e5d1df2e21c830e6a7fb66e3 100644 (file)
@@ -631,7 +631,10 @@ end:
 static
 void destroy_trimmer_iterator(struct trimmer_iterator *trimmer_it)
 {
-       BT_ASSERT(trimmer_it);
+       if (!trimmer_it) {
+               goto end;
+       }
+
        bt_self_component_port_input_message_iterator_put_ref(
                trimmer_it->upstream_iter);
 
@@ -644,6 +647,8 @@ void destroy_trimmer_iterator(struct trimmer_iterator *trimmer_it)
        }
 
        g_free(trimmer_it);
+end:
+       return;
 }
 
 static
@@ -661,14 +666,15 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init(
                bt_self_component_filter *self_comp,
                bt_self_component_port_output *port)
 {
-       bt_component_class_message_iterator_init_method_status status =
-               BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK;
+       bt_component_class_message_iterator_init_method_status status;
+       bt_self_component_port_input_message_iterator_create_from_message_iterator_status
+               msg_iter_status;
        struct trimmer_iterator *trimmer_it;
 
        trimmer_it = g_new0(struct trimmer_iterator, 1);
        if (!trimmer_it) {
                status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
-               goto end;
+               goto error;
        }
 
        trimmer_it->trimmer_comp = bt_self_component_get_data(
@@ -688,20 +694,20 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init(
 
        trimmer_it->begin = trimmer_it->trimmer_comp->begin;
        trimmer_it->end = trimmer_it->trimmer_comp->end;
-       trimmer_it->upstream_iter =
+       msg_iter_status =
                bt_self_component_port_input_message_iterator_create_from_message_iterator(
                        self_msg_iter,
                        bt_self_component_filter_borrow_input_port_by_name(
-                               self_comp, in_port_name));
-       if (!trimmer_it->upstream_iter) {
-               status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_ERROR;
-               goto end;
+                               self_comp, in_port_name), &trimmer_it->upstream_iter);
+       if (msg_iter_status != BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK) {
+               status = (int) msg_iter_status;
+               goto error;
        }
 
        trimmer_it->output_messages = g_queue_new();
        if (!trimmer_it->output_messages) {
                status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
-               goto end;
+               goto error;
        }
 
        trimmer_it->stream_states = g_hash_table_new_full(g_direct_hash,
@@ -709,17 +715,19 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init(
                (GDestroyNotify) destroy_trimmer_iterator_stream_state);
        if (!trimmer_it->stream_states) {
                status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
-               goto end;
+               goto error;
        }
 
        trimmer_it->self_msg_iter = self_msg_iter;
        bt_self_message_iterator_set_data(self_msg_iter, trimmer_it);
 
-end:
-       if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK && trimmer_it) {
-               destroy_trimmer_iterator(trimmer_it);
-       }
+       status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK;
+       goto end;
+
+error:
+       destroy_trimmer_iterator(trimmer_it);
 
+end:
        return status;
 }
 
@@ -990,14 +998,25 @@ bt_component_class_message_iterator_next_method_status state_seek_initially(
                struct trimmer_iterator *trimmer_it)
 {
        struct trimmer_comp *trimmer_comp = trimmer_it->trimmer_comp;
-       bt_component_class_message_iterator_next_method_status status =
-               BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK;
+       bt_component_class_message_iterator_next_method_status status;
 
        BT_ASSERT(trimmer_it->begin.is_set);
 
        if (trimmer_it->begin.is_infinite) {
-               if (!bt_self_component_port_input_message_iterator_can_seek_beginning(
-                               trimmer_it->upstream_iter)) {
+               bt_bool can_seek;
+
+               status = (int) bt_self_component_port_input_message_iterator_can_seek_beginning(
+                       trimmer_it->upstream_iter, &can_seek);
+               if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+                       if (status < 0) {
+                               BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+                                       "Cannot make upstream message iterator initially seek its beginning.");
+                       }
+
+                       goto end;
+               }
+
+               if (!can_seek) {
                        BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
                                "Cannot make upstream message iterator initially seek its beginning.");
                        status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
@@ -1007,9 +1026,23 @@ bt_component_class_message_iterator_next_method_status state_seek_initially(
                status = (int) bt_self_component_port_input_message_iterator_seek_beginning(
                        trimmer_it->upstream_iter);
        } else {
-               if (!bt_self_component_port_input_message_iterator_can_seek_ns_from_origin(
-                               trimmer_it->upstream_iter,
-                               trimmer_it->begin.ns_from_origin)) {
+               bt_bool can_seek;
+
+               status = (int) bt_self_component_port_input_message_iterator_can_seek_ns_from_origin(
+                       trimmer_it->upstream_iter, trimmer_it->begin.ns_from_origin,
+                       &can_seek);
+
+               if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) {
+                       if (status < 0) {
+                               BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+                                       "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64,
+                                       trimmer_it->begin.ns_from_origin);
+                       }
+
+                       goto end;
+               }
+
+               if (!can_seek) {
                        BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
                                "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64,
                                trimmer_it->begin.ns_from_origin);
This page took 0.02565 seconds and 4 git commands to generate.