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; }