Diff for /libaitsched/inc/aitsched.h between versions 1.11 and 1.32

version 1.11, 2012/07/24 14:06:10 version 1.32, 2023/02/25 15:55:01
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012Copyright 2004 - 2023
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 49  SUCH DAMAGE. Line 49  SUCH DAMAGE.
   
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/queue.h>  #include <sys/queue.h>
   #include <sys/select.h>
 #include <sys/uio.h>  #include <sys/uio.h>
 #include <stdint.h>  #include <stdint.h>
 #include <pthread.h>  #include <pthread.h>
   #include <assert.h>
   #ifdef EVFILT_LIO
   #include <aio.h>
   #endif
   
   
 /* criteria type */  /* criteria type */
Line 62  SUCH DAMAGE. Line 67  SUCH DAMAGE.
 #define CRITERIA_VAL    4  #define CRITERIA_VAL    4
 #define CRITERIA_TS     5  #define CRITERIA_TS     5
 #define CRITERIA_DATA   6  #define CRITERIA_DATA   6
#define CRITERIA_ID     7#define CRITERIA_DATLEN 7
 #define CRITERIA_ID     8
   
   
 /* early declaration for root & task */  /* early declaration for root & task */
Line 76  typedef enum { Line 82  typedef enum {
         taskALARM,          taskALARM,
         taskNODE,          taskNODE,
         taskPROC,          taskPROC,
         taskUSER,  
         taskSIGNAL,          taskSIGNAL,
           taskAIO,
           taskLIO,
           taskUSER,
         taskEVENT,          taskEVENT,
        taskEVENTLO,        taskTASK,
         taskSUSPEND,           taskSUSPEND, 
         taskREADY,          taskREADY,
         taskUNUSE,          taskUNUSE,
           taskTHREAD, 
           taskRTC,
         taskMAX          taskMAX
 } sched_task_type_t;  } sched_task_type_t;
   
Line 102  struct sched_HooksTask { Line 112  struct sched_HooksTask {
                 sched_hook_func_t       node;                  sched_hook_func_t       node;
                 /* proc(sched_task_t *task, NULL) -> int */                  /* proc(sched_task_t *task, NULL) -> int */
                 sched_hook_func_t       proc;                  sched_hook_func_t       proc;
                 /* user(sched_task_t *task, NULL) -> int */  
                 sched_hook_func_t       user;  
                 /* signal(sched_task_t *task, NULL) -> int */                  /* signal(sched_task_t *task, NULL) -> int */
                 sched_hook_func_t       signal;                  sched_hook_func_t       signal;
                   /* aio(sched_task_t *task, NULL) -> int */
                   sched_hook_func_t       aio;
                   /* lio(sched_task_t *task, NULL) -> int */
                   sched_hook_func_t       lio;
                   /* user(sched_task_t *task, NULL) -> int */
                   sched_hook_func_t       user;
                 /* event(sched_task_t *task, NULL) -> int */                  /* event(sched_task_t *task, NULL) -> int */
                 sched_hook_func_t       event;                  sched_hook_func_t       event;
                /* eventlo(sched_task_t *task, NULL) -> int */                /* task(sched_task_t *task, NULL) -> int */
                sched_hook_func_t       eventlo;                sched_hook_func_t       task;
                 /* suspend(sched_task_t *task, NULL) -> int */                  /* suspend(sched_task_t *task, NULL) -> int */
                 sched_hook_func_t       suspend;                  sched_hook_func_t       suspend;
                   /* thread(sched_task_t *task, NULL) -> int */
                   sched_hook_func_t       thread;
                   /* rtc(sched_task_t *task, NULL) -> int */
                   sched_hook_func_t       rtc;
         }       hook_add;          }       hook_add;
         struct {          struct {
                   /* exit(sched_task_t *task, void *exitValue) -> int */
                   sched_hook_func_t       exit;
                 /* cancel(sched_task_t *task, NULL) -> int */                  /* cancel(sched_task_t *task, NULL) -> int */
                 sched_hook_func_t       cancel;                  sched_hook_func_t       cancel;
                 /* resume(sched_task_t *task, NULL) -> int */                  /* resume(sched_task_t *task, NULL) -> int */
Line 140  typedef struct sched_HooksTask hooks_task_t; Line 160  typedef struct sched_HooksTask hooks_task_t;
   
 /* task callback, like pthread callback! */  /* task callback, like pthread callback! */
 typedef void *(*sched_task_func_t)(sched_task_t * /* current task data*/);  typedef void *(*sched_task_func_t)(sched_task_t * /* current task data*/);
   #define SCHED_TASK_DEFINE(x)    void *(x)(sched_task_t*)
   
 /* task lock helpers */  /* task lock helpers */
 #define TASK_LOCK(x)            ((x)->task_lock = 42)  #define TASK_LOCK(x)            ((x)->task_lock = 42)
Line 148  typedef void *(*sched_task_func_t)(sched_task_t * /* c Line 169  typedef void *(*sched_task_func_t)(sched_task_t * /* c
   
 /* task & queue */  /* task & queue */
 struct sched_Task {  struct sched_Task {
         volatile int                    task_lock;  
         uintptr_t                       task_id;          uintptr_t                       task_id;
 #define TASK_ID(x)      ((struct sched_Task*) (x)->task_id)  #define TASK_ID(x)      ((struct sched_Task*) (x)->task_id)
         sched_task_type_t               task_type;          sched_task_type_t               task_type;
 #define TASK_TYPE(x)    (x)->task_type  #define TASK_TYPE(x)    (x)->task_type
           volatile int                    task_lock;
   
         sched_root_task_t               *task_root;          sched_root_task_t               *task_root;
 #define TASK_ROOT(x)    (x)->task_root  #define TASK_ROOT(x)    (x)->task_root
         sched_task_func_t               task_func;          sched_task_func_t               task_func;
 #define TASK_FUNC(x)    (x)->task_func  #define TASK_FUNC(x)    (x)->task_func
           intptr_t                        task_ret;
   #define TASK_RET(x)     (x)->task_ret
           unsigned long                   task_flag;
   #define TASK_FLAG(x)    (x)->task_flag
   
         void                            *task_arg;          void                            *task_arg;
         union {          union {
Line 170  struct sched_Task { Line 195  struct sched_Task {
 #define TASK_FD(x)      (x)->task_val.fd  #define TASK_FD(x)      (x)->task_val.fd
 #define TASK_TS(x)      (x)->task_val.ts  #define TASK_TS(x)      (x)->task_val.ts
   
   #define TASK_TS2TV(x, tvp)      (assert((tvp)), (tvp)->tv_sec = (x)->task_val.ts.tv_sec, \
                                           (tvp)->tv_usec = (x)->task_val.ts.tv_nsec / 1000)
   
         struct iovec                    task_data;          struct iovec                    task_data;
 #define TASK_DATA(x)    (x)->task_data.iov_base  #define TASK_DATA(x)    (x)->task_data.iov_base
 #define TASK_DATLEN(x)  (x)->task_data.iov_len  #define TASK_DATLEN(x)  (x)->task_data.iov_len
   
           unsigned long                   task_harg;
   #define TASK_HARG(x)    (x)->task_harg
   
         TAILQ_ENTRY(sched_Task)         task_node;          TAILQ_ENTRY(sched_Task)         task_node;
 };  };
 typedef TAILQ_HEAD(, sched_Task) sched_queue_t;  typedef TAILQ_HEAD(, sched_Task) sched_queue_t;
Line 187  typedef TAILQ_HEAD(, sched_Task) sched_queue_t; Line 218  typedef TAILQ_HEAD(, sched_Task) sched_queue_t;
 /* root task */  /* root task */
 struct sched_RootTask {  struct sched_RootTask {
         int             root_kq;          int             root_kq;
           fd_set          root_fds[3];
         struct timespec root_wait;          struct timespec root_wait;
         struct timespec root_poll;          struct timespec root_poll;
        intptr_t        root_cond;        unsigned long   root_miss;
         intptr_t        root_cond[1];
         void            *root_ret;
 #ifdef HAVE_LIBPTHREAD
         pthread_mutex_t root_sigmtx;
         pthread_t       root_sigthr;
         sigset_t        root_sigset;
         sigset_t        root_oldset;
 #endif
   
         pthread_mutex_t root_mtx[taskMAX];          pthread_mutex_t root_mtx[taskMAX];
   
Line 199  struct sched_RootTask { Line 239  struct sched_RootTask {
         sched_queue_t   root_alarm;          sched_queue_t   root_alarm;
         sched_queue_t   root_node;          sched_queue_t   root_node;
         sched_queue_t   root_proc;          sched_queue_t   root_proc;
         sched_queue_t   root_user;  
         sched_queue_t   root_signal;          sched_queue_t   root_signal;
           sched_queue_t   root_aio;
           sched_queue_t   root_lio;
           sched_queue_t   root_user;
         sched_queue_t   root_event;          sched_queue_t   root_event;
        sched_queue_t   root_eventlo;        sched_queue_t   root_task;
         sched_queue_t   root_suspend;          sched_queue_t   root_suspend;
         sched_queue_t   root_ready;          sched_queue_t   root_ready;
         sched_queue_t   root_unuse;          sched_queue_t   root_unuse;
        int             root_eventlo_miss;        sched_queue_t        root_thread;
         sched_queue_t   root_rtc;
   
         hooks_task_t    root_hooks;          hooks_task_t    root_hooks;
         struct iovec    root_data;          struct iovec    root_data;
Line 214  struct sched_RootTask { Line 257  struct sched_RootTask {
 #define ROOT_DATLEN(x)  (x)->root_data.iov_len  #define ROOT_DATLEN(x)  (x)->root_data.iov_len
 };  };
 #define ROOT_QUEUE_EMPTY(x, _q) TAILQ_EMPTY(&((x)->root_##_q))  #define ROOT_QUEUE_EMPTY(x, _q) TAILQ_EMPTY(&((x)->root_##_q))
   #define ROOT_RETURN(x)  (x)->root_ret
   
   
inline int sched_GetErrno();int sched_GetErrno();
inline const char *sched_GetError();const char *sched_GetError();
   
   
 /*  /*
Line 244  int schedEnd(sched_root_task_t ** __restrict root); Line 288  int schedEnd(sched_root_task_t ** __restrict root);
  */   */
 int schedRegisterHooks(sched_root_task_t * __restrict root);  int schedRegisterHooks(sched_root_task_t * __restrict root);
 /*  /*
    * sched_useTask() - Get and init new task
    *
    * @root = root task
    * return: NULL error or !=NULL prepared task
    */
   sched_task_t *sched_useTask(sched_root_task_t * __restrict root);
   /*
    * sched_unuseTask() - Unlock and put task to unuse queue
    *
    * @task = task
    * return: always is NULL
    */
   sched_task_t *sched_unuseTask(sched_task_t * __restrict task);
   /*
  * schedPolling() - Polling timeout period if no timer task is present   * schedPolling() - Polling timeout period if no timer task is present
  *   *
  * @root = root task   * @root = root task
Line 251  int schedRegisterHooks(sched_root_task_t * __restrict  Line 309  int schedRegisterHooks(sched_root_task_t * __restrict 
  * @tsold = old timeout polling if !=NULL   * @tsold = old timeout polling if !=NULL
  * return: -1 error or 0 ok   * return: -1 error or 0 ok
  */   */
inline int schedPolling(sched_root_task_t * __restrict root, int schedPolling(sched_root_task_t * __restrict root, 
                 struct timespec * __restrict ts, struct timespec * __restrict tsold);                  struct timespec * __restrict ts, struct timespec * __restrict tsold);
 /*  /*
  * schedTermCondition() - Activate hook for scheduler condition kill   * schedTermCondition() - Activate hook for scheduler condition kill
  *   *
  * @root = root task   * @root = root task
  * @condValue = condition value, kill schedRun() if condValue == killState   * @condValue = condition value, kill schedRun() if condValue == killState
 * return: -1 error ok 0 ok * return: -1 error or 0 ok
  */   */
inline int schedTermCondition(sched_root_task_t * __restrict root, intptr_t condValue);int schedTermCondition(sched_root_task_t * __restrict root, intptr_t * __restrict condValue);
 /*  /*
  * schedCall() - Call task execution function   * schedCall() - Call task execution function
  *   *
  * @task = current task   * @task = current task
  * return: !=NULL error or =NULL ok   * return: !=NULL error or =NULL ok
  */   */
inline void *schedCall(sched_task_t * __restrict task);void *schedCall(sched_task_t * __restrict task);
 /*  /*
  * schedFetch() - Fetch ready task   * schedFetch() - Fetch ready task
  *   *
  * @root = root task   * @root = root task
  * return: =NULL error or !=NULL ready task   * return: =NULL error or !=NULL ready task
  */   */
inline void *schedFetch(sched_root_task_t * __restrict root);void *schedFetch(sched_root_task_t * __restrict root);
 /*  /*
  * schedRun() - Scheduler *run loop*   * schedRun() - Scheduler *run loop*
  *   *
Line 296  int schedCancel(sched_task_t * __restrict task); Line 354  int schedCancel(sched_task_t * __restrict task);
  * @root = root task   * @root = root task
  * @type = cancel from queue type, if =taskMAX cancel same task from all queues   * @type = cancel from queue type, if =taskMAX cancel same task from all queues
  * @criteria = find task by criteria    * @criteria = find task by criteria 
 *      [CRITERIA_ANY|CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA] *      [ CRITERIA_ANY|CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|
  *                CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA|CRITERIA_DATLEN ]
  * @param = search parameter   * @param = search parameter
  * @hook = custom cleanup hook function, may be NULL   * @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   * return: -1 error, -2 error in sub-stage cancel execution, -3 error from custom hook or 0 ok
  */   */
 int schedCancelby(sched_root_task_t * __restrict root, sched_task_type_t type,   int schedCancelby(sched_root_task_t * __restrict root, sched_task_type_t type, 
                u_char criteria, void *param, sched_hook_func_t hook);                unsigned char criteria, void *param, sched_hook_func_t hook);
 /*
  * schedQuery() - Query task in scheduler
  *
  * @task = task
  * return: -1 error, 0 found  and 1 not found
  */
 int schedQuery(sched_task_t * __restrict task);
 /*
  * schedQueryby() - Query task in scheduler by criteria
  *
  * @root = root 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_DATLEN ]
  * @param = search parameter
  * return: NULL not found or !=NULL task
  */
 sched_task_t *schedQueryby(sched_root_task_t * __restrict root, sched_task_type_t type, 
                 unsigned char criteria, void *param);
 /*
  * schedSignalDispatch() - Activate or Deactivate signal dispatcher
  *
  * @root = root task
  * @on = Activate or =0 deactivate
  * return: -1 error or 0 ok
  */
 int schedSignalDispatch(sched_root_task_t * __restrict root, int on);
   
   
 /*  /*
    * schedReadExt() - Add READ I/O task to scheduler queue with custom event mask
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = fd handle
    * @opt_data = Optional data
    * @opt_dlen = Optional data length
    * @mask = Event mask
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedReadExt(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                   int fd, void *opt_data, size_t opt_dlen, unsigned long mask);
   /*
  * schedRead() - Add READ I/O task to scheduler queue   * schedRead() - Add READ I/O task to scheduler queue
  *   *
  * @root = root task   * @root = root task
Line 318  int schedCancelby(sched_root_task_t * __restrict root, Line 419  int schedCancelby(sched_root_task_t * __restrict root,
  */   */
 sched_task_t *schedRead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg,   sched_task_t *schedRead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                 int fd, void *opt_data, size_t opt_dlen);                  int fd, void *opt_data, size_t opt_dlen);
#define schedReadSelf(x)        schedRead(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \#define schedReadSelf(x)        schedReadExt(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                TASK_FD((x)), TASK_DATA((x)), TASK_DATLEN((x)))                TASK_FD((x)), TASK_DATA((x)), TASK_DATLEN((x)), TASK_HARG((x)))
 /*  /*
    * schedWriteExt() - Add WRITE I/O task to scheduler queue with custom event mask
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = fd handle
    * @opt_data = Optional data
    * @opt_dlen = Optional data length
    * @mask = Event mask
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedWriteExt(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                   int fd, void *opt_data, size_t opt_dlen, unsigned long mask);
   /*
  * schedWrite() - Add WRITE I/O task to scheduler queue   * schedWrite() - Add WRITE I/O task to scheduler queue
  *   *
  * @root = root task   * @root = root task
Line 333  sched_task_t *schedRead(sched_root_task_t * __restrict Line 448  sched_task_t *schedRead(sched_root_task_t * __restrict
  */   */
 sched_task_t *schedWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg,   sched_task_t *schedWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                 int fd, void *opt_data, size_t opt_dlen);                  int fd, void *opt_data, size_t opt_dlen);
#define schedWriteSelf(x)       schedWrite(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \#define schedWriteSelf(x)       schedWriteExt(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                TASK_FD((x)), TASK_DATA((x)), TASK_DATLEN((x)))                TASK_FD((x)), TASK_DATA((x)), TASK_DATLEN((x)), TASK_HARG((x)))
 /*  /*
  * schedAlarm() - Add ALARM task to scheduler queue   * schedAlarm() - Add ALARM task to scheduler queue
  *   *
Line 342  sched_task_t *schedWrite(sched_root_task_t * __restric Line 457  sched_task_t *schedWrite(sched_root_task_t * __restric
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
  * @ts = timeout argument structure, minimum alarm timer resolution is 1msec!   * @ts = timeout argument structure, minimum alarm timer resolution is 1msec!
 * @opt_data = Optional data * @opt_data = Alarm timer ID
  * @opt_dlen = Optional data length   * @opt_dlen = Optional data length
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
Line 351  sched_task_t *schedAlarm(sched_root_task_t * __restric Line 466  sched_task_t *schedAlarm(sched_root_task_t * __restric
 #define schedAlarmSelf(x)       schedAlarm(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \  #define schedAlarmSelf(x)       schedAlarm(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                 TASK_TS((x)), TASK_DATA((x)), TASK_DATLEN((x)))                  TASK_TS((x)), TASK_DATA((x)), TASK_DATLEN((x)))
 /*  /*
    * schedRTC() - Add RTC task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @ts = timeout argument structure, minimum alarm timer resolution is 1msec!
    * @opt_data = Optional RTC ID
    * @opt_dlen = Optional data length
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedRTC(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                   struct timespec ts, void *opt_data, size_t opt_dlen);
   #define schedRTCSelf(x)         schedRTC(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                   TASK_TS((x)), TASK_DATA((x)), TASK_DATLEN((x)))
   /*
  * schedNode() - Add NODE task to scheduler queue   * schedNode() - Add NODE task to scheduler queue
  *   *
  * @root = root task   * @root = root task
Line 366  sched_task_t *schedNode(sched_root_task_t * __restrict Line 496  sched_task_t *schedNode(sched_root_task_t * __restrict
 #define schedNodeSelf(x)        schedNode(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \  #define schedNodeSelf(x)        schedNode(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                 TASK_FD((x)), TASK_DATA((x)), TASK_DATLEN((x)))                  TASK_FD((x)), TASK_DATA((x)), TASK_DATLEN((x)))
 /*  /*
    * schedNode2() - Add NODE task with all events to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = fd handle
    * @opt_data = Optional data
    * @opt_dlen = Optional data length
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedNode2(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                   int fd, void *opt_data, size_t opt_dlen);
   #define schedNode2Self(x)       schedNode2(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                   TASK_FD((x)), TASK_DATA((x)), TASK_DATLEN((x)))
   /*
  * schedProc() - Add PROC task to scheduler queue   * schedProc() - Add PROC task to scheduler queue
  *   *
  * @root = root task   * @root = root task
Line 396  sched_task_t *schedSignal(sched_root_task_t * __restri Line 541  sched_task_t *schedSignal(sched_root_task_t * __restri
 #define schedSignalSelf(x)      schedSignal(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \  #define schedSignalSelf(x)      schedSignal(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                 TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))                  TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))
   
   #ifdef EVFILT_LIO
 /*  /*
    * schedAIO() - Add AIO task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @acb = AIO cb structure address
    * @opt_data = Optional data
    * @opt_dlen = Optional data length
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedAIO(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                   struct aiocb * __restrict acb, void *opt_data, size_t opt_dlen);
   /*
    * schedAIORead() - Add AIO read task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = file descriptor
    * @buffer = Buffer
    * @buflen = Buffer length
    * @offset = Offset from start of file, if =-1 from current position
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedAIORead(sched_root_task_t * __restrict root, sched_task_func_t func, 
                   void *arg, int fd, void *buffer, size_t buflen, off_t offset);
   /*
    * schedAIOWrite() - Add AIO write task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = file descriptor
    * @buffer = Buffer
    * @buflen = Buffer length
    * @offset = Offset from start of file, if =-1 from current position
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedAIOWrite(sched_root_task_t * __restrict root, sched_task_func_t func, 
                   void *arg, int fd, void *buffer, size_t buflen, off_t offset);
   
   /*
    * schedLIO() - Add AIO bulk tasks to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @acbs = AIO cb structure addresses
    * @opt_data = Optional data
    * @opt_dlen = Optional data length
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedLIO(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                   struct aiocb ** __restrict acbs, void *opt_data, size_t opt_dlen);
   /*
    * schedLIORead() - Add list of AIO read tasks to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = file descriptor
    * @bufs = Buffer's list
    * @nbufs = Number of Buffers
    * @offset = Offset from start of file, if =-1 from current position
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedLIORead(sched_root_task_t * __restrict root, sched_task_func_t func, 
                   void *arg, int fd, struct iovec *bufs, size_t nbufs, off_t offset);
   /*
    * schedLIOWrite() - Add list of AIO write tasks to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = file descriptor
    * @bufs = Buffer's list
    * @nbufs = Number of Buffers
    * @offset = Offset from start of file, if =-1 from current position
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedLIOWrite(sched_root_task_t * __restrict root, sched_task_func_t func, 
                   void *arg, int fd, struct iovec *bufs, size_t nbufs, off_t offset);
   #endif  /* EVFILT_LIO */
   
   /*
  * schedUser() - Add trigger USER task to scheduler queue   * schedUser() - Add trigger USER task to scheduler queue
  *   *
  * @root = root task   * @root = root task
Line 432  int schedTrigger(sched_task_t * __restrict task); Line 663  int schedTrigger(sched_task_t * __restrict task);
  */   */
 sched_task_t *schedTimer(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg,   sched_task_t *schedTimer(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                 struct timespec ts, void *opt_data, size_t opt_dlen);                  struct timespec ts, void *opt_data, size_t opt_dlen);
 #define schedTimerSelf(x)       schedTimer(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \  
                 TASK_TS((x)), TASK_DATA((x)), TASK_DATLEN((x)))  
 /*  /*
  * schedEvent() - Add EVENT task to scheduler queue   * schedEvent() - Add EVENT task to scheduler queue
  *   *
Line 450  sched_task_t *schedEvent(sched_root_task_t * __restric Line 679  sched_task_t *schedEvent(sched_root_task_t * __restric
 #define schedEventSelf(x)       schedEvent(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \  #define schedEventSelf(x)       schedEvent(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                 TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))                  TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))
 /*  /*
 * schedEventLo() - Add EVENT_Lo task to scheduler queue * schedTask() - Add regular task to scheduler queue
  *   *
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
 * @val = additional func argument * @prio = regular task priority, 0 is hi priority for regular tasks
  * @opt_data = Optional data   * @opt_data = Optional data
  * @opt_dlen = Optional data length   * @opt_dlen = Optional data length
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
sched_task_t *schedEventLo(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, sched_task_t *schedTask(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                unsigned long val, void *opt_data, size_t opt_dlen);                unsigned long prio, void *opt_data, size_t opt_dlen);
#define schedEventLoSelf(x) schedEventLo(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \#define schedTaskSelf(x) schedTask(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                 TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))                  TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))
 /*  /*
  * schedSuspend() - Add Suspended task to scheduler queue   * schedSuspend() - Add Suspended task to scheduler queue
Line 484  sched_task_t *schedSuspend(sched_root_task_t * __restr Line 713  sched_task_t *schedSuspend(sched_root_task_t * __restr
  *   *
  * @root = root task   * @root = root task
  * @criteria = find task by criteria    * @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| u_long id) * @param = search parameter (sched_task_t *task| unsigned long id)
  * return: -1 error or 0 resumed ok   * return: -1 error or 0 resumed ok
  */   */
 int schedResumeby(sched_root_task_t * __restrict root, unsigned char criteria, void *param);  int schedResumeby(sched_root_task_t * __restrict root, unsigned char criteria, void *param);
Line 505  sched_task_t *schedCallOnce(sched_root_task_t * __rest Line 734  sched_task_t *schedCallOnce(sched_root_task_t * __rest
                 unsigned long val, void *opt_data, size_t opt_dlen);                  unsigned long val, void *opt_data, size_t opt_dlen);
 #define schedCallAgain(x)       schedCallOnce(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \  #define schedCallAgain(x)       schedCallOnce(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                 TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))                  TASK_VAL((x)), TASK_DATA((x)), TASK_DATLEN((x)))
   
   /*
    * schedThread() - Add thread task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @ss = stack size
    * @opt_data = Optional data
    * @opt_dlen = Optional data length
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *schedThread(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                   size_t ss, void *opt_data, size_t opt_dlen);
   #define schedThreadSelf(x)      schedThread(TASK_ROOT((x)), TASK_FUNC((x)), TASK_ARG((x)), \
                   (size_t) TASK_FLAG((x)), TASK_DATA((x)), TASK_DATLEN((x)))
   /*
    * sched_taskExit() - Exit routine for scheduler task, explicit required for thread tasks
    *
    * @task = current task
    * @retcode = return code
    * return: return code
    */
   void *sched_taskExit(sched_task_t *task, intptr_t retcode);
   /*
    * taskExit() - Exit helper for scheduler task
    *
    * @t = current executed task
    * @x = exit value for task
    * return: none
    */
   #define taskExit(t, x)          return sched_taskExit((t), (intptr_t) (x))
   
   
 #endif  #endif

Removed from v.1.11  
changed lines
  Added in v.1.32


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>