Diff for /libaitsched/src/aitsched.c between versions 1.34 and 1.37.6.1

version 1.34, 2023/08/31 15:23:24 version 1.37.6.1, 2026/05/19 00:39:51
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 54  char sched_Error[STRSIZ]; Line 54  char sched_Error[STRSIZ];
   
 #pragma GCC visibility pop  #pragma GCC visibility pop
   
   volatile pthread_t sched_sigThr;
   
   
 // sched_GetErrno() Get error code of last operation  // sched_GetErrno() Get error code of last operation
 int  int
 sched_GetErrno()  sched_GetErrno()
Line 272  schedInit(void ** __restrict data, size_t datlen) Line 274  schedInit(void ** __restrict data, size_t datlen)
                 for (i = 0; i < taskMAX; i++)                  for (i = 0; i < taskMAX; i++)
                         pthread_mutex_unlock(&root->root_mtx[i]);                          pthread_mutex_unlock(&root->root_mtx[i]);
   
   #if SUP_ENABLE == KQ_SUPPORT
                   sigfillset(&ss);
                   pthread_sigmask(SIG_BLOCK, &ss, &root->root_oldset);
   #else
                 pthread_sigmask(SIG_BLOCK, NULL, &root->root_oldset);                  pthread_sigmask(SIG_BLOCK, NULL, &root->root_oldset);
   #endif
 #else  #else
                 sigprocmask(SIG_BLOCK, NULL, &root->root_oldset);                  sigprocmask(SIG_BLOCK, NULL, &root->root_oldset);
 #endif  #endif
Line 437  schedCall(sched_task_t * __restrict task) Line 444  schedCall(sched_task_t * __restrict task)
         if (!TASK_ISLOCKED(task))          if (!TASK_ISLOCKED(task))
                 TASK_LOCK(task);                  TASK_LOCK(task);
   
           if (task->task_root->root_hooks.hook_exec.profile)
                   task->task_root->root_hooks.hook_exec.profile(task->task_root, (void*) 0);
         ptr = task->task_func(task);          ptr = task->task_func(task);
           if (task->task_root->root_hooks.hook_exec.profile)
                   task->task_root->root_hooks.hook_exec.profile(task->task_root, (void*) 1);
   
         TASK_UNLOCK(task);          TASK_UNLOCK(task);
         return ptr;          return ptr;
Line 1069  schedPolling(sched_root_task_t * __restrict root, stru Line 1080  schedPolling(sched_root_task_t * __restrict root, stru
 int  int
 schedTermCondition(sched_root_task_t * __restrict root, intptr_t * __restrict condValue)  schedTermCondition(sched_root_task_t * __restrict root, intptr_t * __restrict condValue)
 {  {
        if (!root && !condValue)        if (!root || !condValue)
                 return -1;                  return -1;
   
         *root->root_cond = *condValue;          *root->root_cond = *condValue;
Line 1184  _sched_sigDisp(void *arg) Line 1195  _sched_sigDisp(void *arg)
  *   *
  * @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  int
 schedSignalDispatch(sched_root_task_t * __restrict root, int on)  schedSignalDispatch(sched_root_task_t * __restrict root, int on)
Line 1203  schedSignalDispatch(sched_root_task_t * __restrict roo Line 1214  schedSignalDispatch(sched_root_task_t * __restrict roo
 #endif  #endif
   
         if (!on) {          if (!on) {
                pthread_cancel(root->root_sigthr);                if (root->root_sigthr) {
                         if (root->root_sigthr == sched_sigThr) {
 #ifdef __linux__  #ifdef __linux__
                root->root_sigthr = 0L;                                sched_sigThr = 0L;
 #else  #else
                root->root_sigthr = NULL;                                sched_sigThr = NULL;
 #endif  #endif
                           }
                           pthread_cancel(root->root_sigthr);
   #ifdef __linux__
                           root->root_sigthr = 0L;
   #else
                           root->root_sigthr = NULL;
   #endif
                   }
   
                 return 0;                  return 0;
         }          }
   
Line 1224  schedSignalDispatch(sched_root_task_t * __restrict roo Line 1245  schedSignalDispatch(sched_root_task_t * __restrict roo
         pthread_attr_setschedpolicy(&attr, SCHED_OTHER);          pthread_attr_setschedpolicy(&attr, SCHED_OTHER);
 #endif  #endif
   
           /* if we have already started signal thread, then skip routine */
           if (root->root_sigthr)
                   return 1;
           if (sched_sigThr)
                   return 2;
   
         sigfillset(&ss);          sigfillset(&ss);
         pthread_sigmask(SIG_BLOCK, &ss, NULL);          pthread_sigmask(SIG_BLOCK, &ss, NULL);
   
Line 1237  schedSignalDispatch(sched_root_task_t * __restrict roo Line 1264  schedSignalDispatch(sched_root_task_t * __restrict roo
 #endif  #endif
                 pthread_sigmask(SIG_SETMASK, &root->root_oldset, NULL);                  pthread_sigmask(SIG_SETMASK, &root->root_oldset, NULL);
                 return -1;                  return -1;
        }        } else
                 sched_sigThr = root->root_sigthr;
   
         return 0;          return 0;
 }  }

Removed from v.1.34  
changed lines
  Added in v.1.37.6.1


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