--- libaitsched/inc/defs.h 2022/10/17 22:45:06 1.17 +++ libaitsched/inc/defs.h 2023/02/25 15:55:01 1.18 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: defs.h,v 1.17 2022/10/17 22:45:06 misho Exp $ +* $Id: defs.h,v 1.18 2023/02/25 15:55:01 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004 - 2022 +Copyright 2004 - 2023 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -182,6 +182,22 @@ extern char sched_Error[]; void sched_SetErr(int, char *, ...); +static inline struct timespec * +sched_timespecmin(struct timespec * __restrict spa, struct timespec * __restrict spb) +{ + assert(spa && spb); + + if (sched_timespecisinf(spa)) + return spb; + if (sched_timespecisinf(spb)) + return spa; + + if (spa->tv_sec == spb->tv_sec) + return (spa->tv_nsec < spb->tv_nsec) ? spa : spb; + else + return (spa->tv_sec < spb->tv_sec) ? spa : spb; +} + static inline void remove_task_from(sched_task_t * __restrict t, sched_queue_t * __restrict q) { @@ -212,6 +228,15 @@ transit_task2unuse(sched_task_t * __restrict t, sched_ TASK_UNLOCK(t); TASK_TYPE(t) = taskUNUSE; insert_task_to(t, &(TASK_ROOT(t))->root_unuse); +} + +static inline void +transit_task2ready(sched_task_t * __restrict t, sched_queue_t * __restrict q) +{ + remove_task_from(t, q); + + t->task_type = taskREADY; + insert_task_to(t, &(TASK_ROOT(t))->root_ready); }