[tarantool-patches] [PATCH 1/1] test: drop invalid assert from swim test transport

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Tue Apr 30 02:27:04 MSK 2019


The assertion was checking that a next event object is not the
same as the previous, but

    1) the previous was deleted already to this moment;
    2) comparison was done by pointer

The first problem would be enough to drop it. The second is
already curious - looks like after the old event was deleted,
the next event was allocated right on the same memory. This is
why their pointers are equal and the assertion fails.

For example, swim_timer_event_process() - it deletes the event
object and calls ev_invoke() which can generate a new event on
the just freed memory.
---
 test/unit/swim_test_ev.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/test/unit/swim_test_ev.c b/test/unit/swim_test_ev.c
index 135f20107..3c2eae039 100644
--- a/test/unit/swim_test_ev.c
+++ b/test/unit/swim_test_ev.c
@@ -283,7 +283,7 @@ swim_ev_timer_stop(struct ev_loop *loop, struct ev_timer *base)
 void
 swim_test_ev_do_loop_step(struct ev_loop *loop)
 {
-	struct swim_event *next_e, *e = event_heap_top(&event_heap);
+	struct swim_event *e = event_heap_top(&event_heap);
 	if (e != NULL) {
 		assert(e->deadline >= watch);
 		/* Multiple events can have the same deadline. */
@@ -291,9 +291,7 @@ swim_test_ev_do_loop_step(struct ev_loop *loop)
 		say_verbose("Loop watch %f", watch);
 		do {
 			e->process(e, loop);
-			next_e = event_heap_top(&event_heap);
-			assert(e != next_e);
-			e = next_e;
+			e = event_heap_top(&event_heap);
 		} while (e != NULL && e->deadline == watch);
 	}
 }
-- 
2.20.1 (Apple Git-117)





More information about the Tarantool-patches mailing list