--- libaitsched/inc/defs.h 2014/05/21 21:07:49 1.13.2.3 +++ libaitsched/inc/defs.h 2014/06/03 20:39:54 1.13.2.4 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: defs.h,v 1.13.2.3 2014/05/21 21:07:49 misho Exp $ +* $Id: defs.h,v 1.13.2.4 2014/06/03 20:39:54 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -71,6 +71,13 @@ SUCH DAMAGE. #define TIMER_RELTIME 0 #endif +#ifndef EV_EOF +#define EV_EOF 0x8000 /* EOF detected */ +#endif +#ifndef EV_ERROR +#define EV_ERROR 0x4000 /* error, data contains errno */ +#endif + #ifndef __unused #define __unused __attribute__((unused)) #endif @@ -82,6 +89,14 @@ SUCH DAMAGE. strlcpy(sched_Error, strerror(errno), STRSIZ); \ } +#ifndef HAVE_LIBPTHREAD +#define pthread_mutex_lock(x) +#define pthread_mutex_unlock(x) +#endif + +#define SCHED_QLOCK(r, x) pthread_mutex_lock(&(r)->root_mtx[(x)]) +#define SCHED_QUNLOCK(r, x) pthread_mutex_unlock(&(r)->root_mtx[(x)]) + #define sched_timespecclear(tsp) ((tsp)->tv_sec = (tsp)->tv_nsec = 0) #define sched_timespecinf(tsp) ((tsp)->tv_sec = (tsp)->tv_nsec = -1) #define sched_timespecisinf(tsp) ((tsp)->tv_sec == -1 && (tsp)->tv_nsec == -1) @@ -159,6 +174,39 @@ void sched_SetErr(int, char *, ...); void *_sched_threadWrapper(sched_task_t *); void *_sched_rtcWrapper(sched_task_t *); + + +static inline void +remove_task_from(sched_task_t * __restrict t, sched_queue_t * __restrict q) +{ + assert(t && q); + + SCHED_QLOCK(TASK_ROOT(t), TASK_TYPE(t)); + TAILQ_REMOVE(q, t, task_node); + SCHED_QUNLOCK(TASK_ROOT(t), TASK_TYPE(t)); +} + +static inline void +insert_task_to(sched_task_t * __restrict t, sched_queue_t * __restrict q) +{ + assert(t && q); + + SCHED_QLOCK(TASK_ROOT(t), TASK_TYPE(t)); + TAILQ_INSERT_TAIL(q, t, task_node); + SCHED_QUNLOCK(TASK_ROOT(t), TASK_TYPE(t)); +} + +static inline void +transit_task2unuse(sched_task_t * __restrict t, sched_queue_t * __restrict q) +{ + assert(t && q); + + remove_task_from(t, q); + + TASK_UNLOCK(t); + TASK_TYPE(t) = taskUNUSE; + insert_task_to(t, &(TASK_ROOT(t))->root_unuse); +} #endif