Diff for /libaitsched/inc/aitsched.h between versions 1.31.2.1 and 1.35.2.2

version 1.31.2.1, 2023/02/23 15:36:41 version 1.35.2.2, 2026/05/20 03:37:12
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 - 2023Copyright 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
   
   #ifdef ATOMIC_SUPPORT
   #ifndef E_ATOMIC_ALIGN
           #define E_ATOMIC_ALIGN  alignas(sizeof(int) * 8)
   #endif
   #endif
   
 /* criteria type */  /* criteria type */
 #define CRITERIA_ANY    0  #define CRITERIA_ANY    0
Line 146  struct sched_HooksTask { Line 159  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 178  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((atomic_int*) &(x)->task_lock, 42, memory_order_release)
#define TASK_ISLOCKED(x)        ((x)->task_lock)        #define TASK_UNLOCK(x)          atomic_store_explicit((atomic_int*) &(x)->task_lock, 0, memory_order_release)
         #define TASK_ISLOCKED(x)        atomic_load_explicit((atomic_int*) &(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 194  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
           E_ATOMIC_ALIGN 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 225  struct sched_RootTask { Line 250  struct sched_RootTask {
         intptr_t        root_cond[1];          intptr_t        root_cond[1];
         void            *root_ret;          void            *root_ret;
 #ifdef HAVE_LIBPTHREAD  #ifdef HAVE_LIBPTHREAD
           pthread_mutex_t root_sigmtx;
         pthread_t       root_sigthr;          pthread_t       root_sigthr;
           sigset_t        root_sigset;
           sigset_t        root_oldset;
 #endif  #endif
   
         pthread_mutex_t root_mtx[taskMAX];          pthread_mutex_t root_mtx[taskMAX];
Line 255  struct sched_RootTask { Line 283  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 384  sched_task_t *schedQueryby(sched_root_task_t * __restr Line 416  sched_task_t *schedQueryby(sched_root_task_t * __restr
  *   *
  * @root = root task   * @root = root task
  * @on = Activate or =0 deactivate   * @on = Activate or =0 deactivate
 * return: -1 error or 0 ok * return: -1 error, 1 already started, 2 another thread already started or 0 ok
  */   */
 int schedSignalDispatch(sched_root_task_t * __restrict root, int on);  int schedSignalDispatch(sched_root_task_t * __restrict root, int on);
   
Line 764  void *sched_taskExit(sched_task_t *task, intptr_t retc Line 796  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.31.2.1  
changed lines
  Added in v.1.35.2.2


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