X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Futils%2Ftrimmer%2Ftrimmer.c;h=92fad09b6b43c721f67c9d40fa57cbdee43ee42c;hb=59225a3e0e13a9c674234755e55055d9ff68d635;hp=c821e0b41e75b269d1f45858d15c3cc12837408f;hpb=ab90ee94c091881d463bc3115bec6888af9c229c;p=babeltrace.git diff --git a/src/plugins/utils/trimmer/trimmer.c b/src/plugins/utils/trimmer/trimmer.c index c821e0b4..92fad09b 100644 --- a/src/plugins/utils/trimmer/trimmer.c +++ b/src/plugins/utils/trimmer/trimmer.c @@ -563,6 +563,7 @@ end: bt_component_class_init_method_status trimmer_init( bt_self_component_filter *self_comp_flt, + bt_self_component_filter_configuration *config, const bt_value *params, void *init_data) { int ret; @@ -631,7 +632,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 +648,8 @@ void destroy_trimmer_iterator(struct trimmer_iterator *trimmer_it) } g_free(trimmer_it); +end: + return; } static @@ -661,14 +667,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 +695,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 +716,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 +999,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 +1027,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);