--- libaitsched/src/aitsched.c 2013/10/21 13:38:05 1.20 +++ libaitsched/src/aitsched.c 2014/05/19 23:21:41 1.25.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitsched.c,v 1.20 2013/10/21 13:38:05 misho Exp $ +* $Id: aitsched.c,v 1.25.2.1 2014/05/19 23:21:41 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, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 +Copyright 2004 - 2014 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -102,7 +102,7 @@ schedRegisterHooks(sched_root_task_t * __restrict root root->root_hooks.hook_add.read = sched_hook_read; root->root_hooks.hook_add.write = sched_hook_write; root->root_hooks.hook_add.alarm = sched_hook_alarm; -#if defined(HAVE_TIMER_CREATE) && defined(HAVE_TIMER_SETTIME) +#if defined(HAVE_TIMER_CREATE) && defined(HAVE_TIMER_SETTIME) && defined(HAVE_TIMER_DELETE) root->root_hooks.hook_add.rtc = sched_hook_rtc; #endif root->root_hooks.hook_add.node = sched_hook_node; @@ -335,6 +335,10 @@ schedFetch(sched_root_task_t * __restrict root) int schedTrigger(sched_task_t * __restrict task) { +#if SUP_ENABLE != KQ_SUPPORT + sched_SetErr(ENOTSUP, "disabled kqueue support"); + return -1; +#else #ifndef EVFILT_USER sched_SetErr(ENOTSUP, "Not supported kevent() filter"); return -1; @@ -357,6 +361,7 @@ schedTrigger(sched_task_t * __restrict task) return 0; #endif +#endif /* KQ_DISABLE */ } /* @@ -441,7 +446,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 */ @@ -449,7 +454,7 @@ int schedQueryby(sched_root_task_t * __restrict root, sched_task_type_t type, u_char criteria, void *param) { - sched_task_t *task, *tmp; + sched_task_t *task; sched_queue_t *queue; register int flg = 0; @@ -575,6 +580,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 +686,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 +825,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; @@ -941,7 +954,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 +977,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;