From 3af310ceb3682179bb57a731c3ff1342470123a4 Mon Sep 17 00:00:00 2001 From: Tobias Langer Date: Tue, 4 Oct 2016 17:27:15 +0200 Subject: [PATCH] Fixed assertion problem in priority queue. The priority queue relies on setting an invalid time value for non-existing nodes. However the time comparison checks for valid embb_time_t types. Therefore prior to doing the time comparison, the time values have to be checked for validity. --- mtapi_c/src/embb_mtapi_priority_queue_t.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mtapi_c/src/embb_mtapi_priority_queue_t.c b/mtapi_c/src/embb_mtapi_priority_queue_t.c index dd9025f..0e974a7 100644 --- a/mtapi_c/src/embb_mtapi_priority_queue_t.c +++ b/mtapi_c/src/embb_mtapi_priority_queue_t.c @@ -145,11 +145,16 @@ embb_mtapi_task_t * embb_mtapi_priority_queue_pop(embb_mtapi_priority_queue_t* t right_deadline.seconds = ULLONG_MAX; } - /* min Heap, swap with the smaller of both children. */ - if(embb_time_compare(&left_deadline, &right_deadline) <= 0) { + /* min Heap, swap with the smaller of both children. + * + * the separate checks are necessary since the comparison operator + * checks whether the time is within certain bounds. */ + if(right_deadline.seconds == ULLONG_MAX || + (left_deadline.seconds != ULLONG_MAX && + embb_time_compare(&left_deadline, &right_deadline) <= 0)) { swap = ii + 1; swap_deadline = left_deadline; - } else if(embb_time_compare(&left_deadline, &right_deadline) > 0) { + } else { swap = ii + 2; swap_deadline = right_deadline; } -- libgit2 0.26.0