Diff for /libaitsched/src/aitsched.c between versions 1.6 and 1.6.2.5

version 1.6, 2012/03/13 10:01:59 version 1.6.2.5, 2012/05/10 15:30:18
Line 93  sched_SetErr(int eno, char *estr, ...) Line 93  sched_SetErr(int eno, char *estr, ...)
 int  int
 schedRegisterHooks(sched_root_task_t * __restrict root)  schedRegisterHooks(sched_root_task_t * __restrict root)
 {  {
        if (!root || (root->root_data.iov_base && root->root_data.iov_len))        assert(root);
                return -1; 
   
         if (root->root_hooks.hook_root.fini)          if (root->root_hooks.hook_root.fini)
                 root->root_hooks.hook_root.fini(root, NULL);                  root->root_hooks.hook_root.fini(root, NULL);
Line 191  schedInit(void ** __restrict data, size_t datlen) Line 190  schedInit(void ** __restrict data, size_t datlen)
 int  int
 schedEnd(sched_root_task_t ** __restrict root)  schedEnd(sched_root_task_t ** __restrict root)
 {  {
        sched_task_t *task;        sched_task_t *task, *tmp;
 #ifdef HAVE_LIBPTHREAD  #ifdef HAVE_LIBPTHREAD
         register int i;          register int i;
 #endif  #endif
Line 199  schedEnd(sched_root_task_t ** __restrict root) Line 198  schedEnd(sched_root_task_t ** __restrict root)
         if (!root || !*root)          if (!root || !*root)
                 return -1;                  return -1;
   
        TAILQ_FOREACH(task, &(*root)->root_read, task_node) {        TAILQ_FOREACH_SAFE(task, &(*root)->root_read, task_node, tmp) {
                 schedCancel(task);                  schedCancel(task);
         }          }
        TAILQ_FOREACH(task, &(*root)->root_write, task_node) {        TAILQ_FOREACH_SAFE(task, &(*root)->root_write, task_node, tmp) {
                 schedCancel(task);                  schedCancel(task);
         }          }
        TAILQ_FOREACH(task, &(*root)->root_timer, task_node) {        TAILQ_FOREACH_SAFE(task, &(*root)->root_timer, task_node, tmp) {
                 schedCancel(task);                  schedCancel(task);
         }          }
        TAILQ_FOREACH(task, &(*root)->root_event, task_node) {        TAILQ_FOREACH_SAFE(task, &(*root)->root_event, task_node, tmp) {
                 schedCancel(task);                  schedCancel(task);
         }          }
        TAILQ_FOREACH(task, &(*root)->root_eventlo, task_node) {        TAILQ_FOREACH_SAFE(task, &(*root)->root_eventlo, task_node, tmp) {
                 schedCancel(task);                  schedCancel(task);
         }          }
        TAILQ_FOREACH(task, &(*root)->root_ready, task_node) {        TAILQ_FOREACH_SAFE(task, &(*root)->root_ready, task_node, tmp) {
                 schedCancel(task);                  schedCancel(task);
         }          }
   
Line 471  schedCancelby(sched_root_task_t * __restrict root, sch Line 470  schedCancelby(sched_root_task_t * __restrict root, sch
  * return: -1 error or 0 ok   * return: -1 error or 0 ok
  */   */
 int  int
schedRun(sched_root_task_t * __restrict root, volatile intptr_t * __restrict killState)schedRun(sched_root_task_t *root, volatile intptr_t * __restrict killState)
 {  {
         sched_task_t *task;          sched_task_t *task;
   
Line 481  schedRun(sched_root_task_t * __restrict root, volatile Line 480  schedRun(sched_root_task_t * __restrict root, volatile
         if (root->root_hooks.hook_exec.run)          if (root->root_hooks.hook_exec.run)
                 if (root->root_hooks.hook_exec.run(root, NULL))                  if (root->root_hooks.hook_exec.run(root, NULL))
                         return -1;                          return -1;
        if (root->root_hooks.hook_exec.fetch) {
                if (killState) {        if (killState) {
                        if (root->root_hooks.hook_exec.condition)                if (root->root_hooks.hook_exec.condition)
                                while (root->root_hooks.hook_exec.condition(root, (void*) killState)) {                        /* condition scheduler loop */
                                        if ((task = root->root_hooks.hook_exec.fetch(root, NULL)))                        while (root && root->root_hooks.hook_exec.fetch && 
                                                schedCall(task);                                        root->root_hooks.hook_exec.condition && 
                                }                                        root->root_hooks.hook_exec.condition(root, (void*) killState)) {
                        else                                if ((task = root->root_hooks.hook_exec.fetch(root, NULL)))
                                while (!*killState) {                                        schedCall(task);
                                        if ((task = root->root_hooks.hook_exec.fetch(root, NULL)))                        }
                                                schedCall(task);                else
                                }                        /* trigger scheduler loop */
                } else                        while (!*killState && root && root->root_hooks.hook_exec.fetch) {
                        while ((task = root->root_hooks.hook_exec.fetch(root, NULL)))                                if ((task = root->root_hooks.hook_exec.fetch(root, NULL)))
                                         schedCall(task);
                         }
         } else
                 /* infinite scheduler loop */
                 while (root && root->root_hooks.hook_exec.fetch)
                         if ((task = root->root_hooks.hook_exec.fetch(root, NULL)))
                                 schedCall(task);                                  schedCall(task);
         }  
   
         return 0;          return 0;
 }  }

Removed from v.1.6  
changed lines
  Added in v.1.6.2.5


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