Fix: lib: set iterator state even in non-dev mode
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 5 Jun 2019 20:38:08 +0000 (16:38 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 6 Jun 2019 14:20:32 +0000 (10:20 -0400)
The following test fails currently when building with
BABELTRACE_DEV_MODE off:

    FAIL: test_finalize (test_message_iterator.UserMessageIteratorTestCase)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File ".../babeltrace/tests/bindings/python/bt2/test_message_iterator.py", line 67, in test_finalize
        self.assertTrue(finalized)
    AssertionError: False is not true

The test verifies that the _finalize method (in Python) of an input port
message iterator is called when the iterator is destroyed.  The failure
shows that the method is not getting called.

The issue is that
bt_self_component_port_input_message_iterator_try_finalize doesn't call
the finalize method if the iterator state is
BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_STATE_NON_INITIALIZED.
However, the iterator state is only set when in dev mode.  In non-dev
mode, the state is left to its initial value of
BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_STATE_NON_INITIALIZED.

Fix this by setting the state of the iterator regardless of whether we
are in dev mode or not.

Change-Id: I158c9d913777eba117ed0d32e82db5a1b29f50ab
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1385
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins
lib/graph/iterator.c

index eba243739fdc07eeafcb0915f784936f884cb59b..cbcaeb060fc193b81bd1845965405539744d4650 100644 (file)
@@ -83,9 +83,8 @@
                (_iter)->state == BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_STATE_LAST_SEEKING_RETURNED_ERROR, \
                "Message iterator is in the wrong state: %!+i", _iter)
 
-BT_ASSERT_PRE_FUNC
 static inline
-void _set_self_comp_port_input_msg_iterator_state(
+void set_self_comp_port_input_msg_iterator_state(
                struct bt_self_component_port_input_message_iterator *iterator,
                enum bt_self_component_port_input_message_iterator_state state)
 {
@@ -95,12 +94,6 @@ void _set_self_comp_port_input_msg_iterator_state(
        iterator->state = state;
 }
 
-#ifdef BT_DEV_MODE
-# define set_self_comp_port_input_msg_iterator_state _set_self_comp_port_input_msg_iterator_state
-#else
-# define set_self_comp_port_input_msg_iterator_state(_a, _b) ((void) _a); ((void) _b);
-#endif
-
 static
 void destroy_base_message_iterator(struct bt_object *obj)
 {
@@ -567,7 +560,6 @@ bt_self_component_port_input_message_iterator_next(
                goto end;
        }
 
-#ifdef BT_DEV_MODE
        /*
         * There is no way that this iterator could have been finalized
         * during its "next" method, as the only way to do this is to
@@ -579,7 +571,6 @@ bt_self_component_port_input_message_iterator_next(
         */
        BT_ASSERT(iterator->state ==
                BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_STATE_ACTIVE);
-#endif
 
        switch (status) {
        case BT_MESSAGE_ITERATOR_STATUS_OK:
@@ -885,9 +876,8 @@ bt_bool bt_self_component_port_input_message_iterator_can_seek_beginning(
        return can;
 }
 
-BT_ASSERT_PRE_FUNC
 static inline
-void _set_iterator_state_after_seeking(
+void set_iterator_state_after_seeking(
                struct bt_self_component_port_input_message_iterator *iterator,
                enum bt_message_iterator_status status)
 {
@@ -915,12 +905,6 @@ void _set_iterator_state_after_seeking(
        set_self_comp_port_input_msg_iterator_state(iterator, new_state);
 }
 
-#ifdef BT_DEV_MODE
-# define set_iterator_state_after_seeking      _set_iterator_state_after_seeking
-#else
-# define set_iterator_state_after_seeking(_iter, _status) ((void) _iter); ((void) _status);
-#endif
-
 enum bt_message_iterator_status
 bt_self_component_port_input_message_iterator_seek_beginning(
                struct bt_self_component_port_input_message_iterator *iterator)
@@ -1191,14 +1175,12 @@ enum bt_message_iterator_status find_message_ge_ns_from_origin(
                BT_LOGD("User method returned: status=%s",
                        bt_message_iterator_status_string(status));
 
-#ifdef BT_DEV_MODE
                /*
                 * The user's "next" method must not do any action which
                 * would change the iterator's state.
                 */
                BT_ASSERT(iterator->state ==
                        BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_STATE_ACTIVE);
-#endif
 
                switch (status) {
                case BT_MESSAGE_ITERATOR_STATUS_OK:
This page took 0.027628 seconds and 4 git commands to generate.