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

version 1.29.10.4, 2022/11/28 23:52:35 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 - 2022Copyright 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 224  struct sched_RootTask { Line 243  struct sched_RootTask {
         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 252  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 372  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);
   
   
 /*  /*
Line 408  sched_task_t *schedRead(sched_root_task_t * __restrict Line 445  sched_task_t *schedRead(sched_root_task_t * __restrict
 #define schedReadSelf(x)        schedReadExt(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_HARG((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 420  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 739  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.29.10.4  
changed lines
  Added in v.1.36


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