--- libaitsched/src/aitsched.c 2013/10/21 13:41:40 1.21 +++ libaitsched/src/aitsched.c 2014/01/27 16:52:56 1.23.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitsched.c,v 1.21 2013/10/21 13:41:40 misho Exp $ +* $Id: aitsched.c,v 1.23.2.1 2014/01/27 16:52:56 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -150,7 +150,11 @@ schedInit(void ** __restrict data, size_t datlen) root->root_miss = MAX_TASK_MISS; /* INFINIT polling period by default */ +#ifndef KQ_DISABLE sched_timespecinf(&root->root_poll); +#else + sched_timevalinf(&root->root_poll); +#endif #ifdef HAVE_LIBPTHREAD for (i = 0; i < taskMAX; i++) @@ -441,7 +445,7 @@ schedQuery(sched_task_t * __restrict task) * @type = query from queue type, if =taskMAX query same task from all queues * @criteria = find task by criteria * [ CRITERIA_ANY|CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL| - * CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA ] + * CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA|CRITERIA_DATLEN ] * @param = search parameter * return: -1 error, 0 found or 1 not found */ @@ -575,6 +579,10 @@ schedQueryby(sched_root_task_t * __restrict root, sche if (TASK_DATA(task) == param) return 0; /* found */ break; + case CRITERIA_DATLEN: + if (TASK_DATLEN(task) == (size_t) param) + return 0; /* found */ + break; default: sched_SetErr(EINVAL, "Invalid parameter criteria %d", criteria); @@ -677,7 +685,7 @@ schedCancel(sched_task_t * __restrict task) * @type = cancel from queue type, if =taskMAX cancel same task from all queues * @criteria = find task by criteria * [ CRITERIA_ANY|CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL| - * CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA ] + * CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA|CRITERIA_DATLEN ] * @param = search parameter * @hook = custom cleanup hook function, may be NULL * return: -1 error, -2 error in sub-stage cancel execution, -3 error from custom hook or 0 ok @@ -816,6 +824,10 @@ schedCancelby(sched_root_task_t * __restrict root, sch if (TASK_DATA(task) == param) flg = 1; break; + case CRITERIA_DATLEN: + if (TASK_DATLEN(task) == (size_t) param) + flg = 1; + break; default: sched_SetErr(EINVAL, "Invalid parameter criteria %d", criteria); flg = -1; @@ -907,6 +919,7 @@ schedPolling(sched_root_task_t * __restrict root, stru if (!root) return -1; +#ifndef KQ_DISABLE if (tsold) *tsold = root->root_poll; @@ -914,7 +927,16 @@ schedPolling(sched_root_task_t * __restrict root, stru sched_timespecinf(&root->root_poll); else root->root_poll = *ts; +#else + if (tsold) + sched_timeval2spec(&root->root_poll, tsold); + if (!ts) + sched_timevalinf(&root->root_poll); + else + sched_timespec2val(ts, &root->root_poll); +#endif + return 0; } @@ -941,7 +963,7 @@ schedTermCondition(sched_root_task_t * __restrict root * * @root = root task * @criteria = find task by criteria - * [CRITERIA_ANY|CRITERIA_ID|CRITERIA_DATA] + * [CRITERIA_ANY|CRITERIA_ID|CRITERIA_VAL|CRITERIA_DATA] * @param = search parameter (sched_task_t *task| unsigned long id) * return: -1 error or 0 resumed ok */ @@ -964,6 +986,7 @@ schedResumeby(sched_root_task_t * __restrict root, u_c flg = 1; break; case CRITERIA_ID: + case CRITERIA_VAL: if (TASK_VAL(task) == (u_long) param) flg = 1; break;