Diff for /libaitsched/inc/aitsched.h between versions 1.28.12.1 and 1.36

version 1.28.12.1, 2018/08/20 12:03:53 version 1.36, 2026/05/20 04:07:04
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 - 2018Copyright 2004 - 2026
         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 57  SUCH DAMAGE. Line 57  SUCH DAMAGE.
 #ifdef EVFILT_LIO  #ifdef EVFILT_LIO
 #include <aio.h>  #include <aio.h>
 #endif  #endif
   #ifdef ATOMIC_SUPPORT
   #ifndef __cplusplus
           #include <stdatomic.h>
   #else
           #include <atomic>
           #define _Atomic(X) std::atomic<X>
   #endif
   #endif
   
   
 /* criteria type */  /* criteria type */
 #define CRITERIA_ANY    0  #define CRITERIA_ANY    0
 #define CRITERIA_CALL   1  #define CRITERIA_CALL   1
Line 146  struct sched_HooksTask { Line 153  struct sched_HooksTask {
                 sched_hook_func_t       exception;                  sched_hook_func_t       exception;
                 /* condition(sched_root_task_t *root, intptr_t *stopValue) -> int */                  /* condition(sched_root_task_t *root, intptr_t *stopValue) -> int */
                 sched_hook_func_t       condition;                  sched_hook_func_t       condition;
                   /* profile(sched_task_t *root, intptr_t *stageValue) -> int */
                   sched_hook_func_t       profile;
         }       hook_exec;          }       hook_exec;
         struct {          struct {
                 /* init(sched_root_task_t *root, void *data) -> int */                  /* init(sched_root_task_t *root, void *data) -> int */
Line 163  typedef void *(*sched_task_func_t)(sched_task_t * /* c Line 172  typedef void *(*sched_task_func_t)(sched_task_t * /* c
 #define SCHED_TASK_DEFINE(x)    void *(x)(sched_task_t*)  #define SCHED_TASK_DEFINE(x)    void *(x)(sched_task_t*)
   
 /* task lock helpers */  /* task lock helpers */
#define TASK_LOCK(x)            ((x)->task_lock = 42)#ifdef ATOMIC_SUPPORT
#define TASK_UNLOCK(x)          ((x)->task_lock ^= (x)->task_lock)        #define TASK_LOCK(x)            atomic_store_explicit(&(x)->task_lock, 42, memory_order_release)
#define TASK_ISLOCKED(x)        ((x)->task_lock)        #define TASK_UNLOCK(x)          atomic_store_explicit(&(x)->task_lock, 0, memory_order_release)
         #define TASK_ISLOCKED(x)        atomic_load_explicit(&(x)->task_lock, memory_order_acquire)
 #else
         #define TASK_LOCK(x)            ((x)->task_lock = 42)
         #define TASK_UNLOCK(x)          ((x)->task_lock ^= (x)->task_lock)
         #define TASK_ISLOCKED(x)        ((x)->task_lock)
 #endif
   
 /* task & queue */  /* task & queue */
 struct sched_Task {  struct sched_Task {
Line 173  struct sched_Task { Line 188  struct sched_Task {
 #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
   #ifdef ATOMIC_SUPPORT
           atomic_int                      task_lock;
   #else
         volatile int                    task_lock;          volatile int                    task_lock;
   #endif
   
         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
Line 202  struct sched_Task { Line 221  struct sched_Task {
 #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 215  typedef TAILQ_HEAD(, sched_Task) sched_queue_t; Line 237  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[2];        fd_set          root_fds[3];
         struct timespec root_wait;          struct timespec root_wait;
         struct timespec root_poll;          struct timespec root_poll;
         unsigned long   root_miss;          unsigned long   root_miss;
         intptr_t        root_cond[1];          intptr_t        root_cond[1];
         void            *root_ret;          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 249  struct sched_RootTask { Line 277  struct sched_RootTask {
 };  };
 #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  #define ROOT_RETURN(x)  (x)->root_ret
   #define ROOT_PROFILING(x, _cb) (x)->root_hooks.hook_exec.profile = (_cb)
   
   #ifdef __cplusplus
   extern "C" {
   #endif
   
 int sched_GetErrno();  int sched_GetErrno();
 const char *sched_GetError();  const char *sched_GetError();
Line 369  int schedQuery(sched_task_t * __restrict task); Line 401  int schedQuery(sched_task_t * __restrict task);
  *      [ CRITERIA_ANY|CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|   *      [ CRITERIA_ANY|CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|
  *              CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA|CRITERIA_DATLEN ]   *              CRITERIA_ID|CRITERIA_TS|CRITERIA_DATA|CRITERIA_DATLEN ]
  * @param = search parameter   * @param = search parameter
 * return: -1 error, 0 found or 1 not found * return: NULL not found or !=NULL task
  */   */
int schedQueryby(sched_root_task_t * __restrict root, sched_task_type_t type, sched_task_t *schedQueryby(sched_root_task_t * __restrict root, sched_task_type_t type, 
                 unsigned char criteria, void *param);                  unsigned char criteria, void *param);
   /*
    * schedSignalDispatch() - Activate or Deactivate signal dispatcher
    *
    * @root = root task
    * @on = Activate or =0 deactivate
    * return: -1 error, 1 already started, 2 another thread already started 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 388  int schedQueryby(sched_root_task_t * __restrict root,  Line 442  int schedQueryby(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 403  sched_task_t *schedRead(sched_root_task_t * __restrict Line 471  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 722  void *sched_taskExit(sched_task_t *task, intptr_t retc Line 790  void *sched_taskExit(sched_task_t *task, intptr_t retc
  */   */
 #define taskExit(t, x)          return sched_taskExit((t), (intptr_t) (x))  #define taskExit(t, x)          return sched_taskExit((t), (intptr_t) (x))
   
   #ifdef __cplusplus
   }
   #endif
   
 #endif  #endif

Removed from v.1.28.12.1  
changed lines
  Added in v.1.36


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