Diff for /libaitsched/src/hooks.c between versions 1.1.1.1.2.8 and 1.2.2.2

version 1.1.1.1.2.8, 2011/09/30 08:13:41 version 1.2.2.2, 2011/10/04 13:50:05
Line 182  sched_hook_read(void *task, void *arg __unused) Line 182  sched_hook_read(void *task, void *arg __unused)
         EV_SET(&chg[0], TASK_FD(t), EVFILT_READ, EV_ADD, 0, 0, (void*) TASK_FD(t));          EV_SET(&chg[0], TASK_FD(t), EVFILT_READ, EV_ADD, 0, 0, (void*) TASK_FD(t));
 #endif  #endif
         if (kevent(t->task_root->root_kq, chg, 1, NULL, 0, &timeout) == -1) {          if (kevent(t->task_root->root_kq, chg, 1, NULL, 0, &timeout) == -1) {
                LOGERR;                if (t->task_root->root_hooks.hook_exec.exception)
                         t->task_root->root_hooks.hook_exec.exception(t->task_root, NULL);
                 else
                         LOGERR;
                 return (void*) -1;                  return (void*) -1;
         }          }
   
Line 219  sched_hook_write(void *task, void *arg __unused) Line 222  sched_hook_write(void *task, void *arg __unused)
         EV_SET(&chg[0], TASK_FD(t), EVFILT_WRITE, EV_ADD, 0, 0, (void*) TASK_FD(t));          EV_SET(&chg[0], TASK_FD(t), EVFILT_WRITE, EV_ADD, 0, 0, (void*) TASK_FD(t));
 #endif  #endif
         if (kevent(t->task_root->root_kq, chg, 1, NULL, 0, &timeout) == -1) {          if (kevent(t->task_root->root_kq, chg, 1, NULL, 0, &timeout) == -1) {
                LOGERR;                if (t->task_root->root_hooks.hook_exec.exception)
                         t->task_root->root_hooks.hook_exec.exception(t->task_root, NULL);
                 else
                         LOGERR;
                 return (void*) -1;                  return (void*) -1;
         }          }
   
Line 308  retry: Line 314  retry:
         } else  /* wait INFTIM */          } else  /* wait INFTIM */
                 timeout = NULL;                  timeout = NULL;
         if ((en = kevent(r->root_kq, NULL, 0, res, KQ_EVENTS, timeout)) == -1) {          if ((en = kevent(r->root_kq, NULL, 0, res, KQ_EVENTS, timeout)) == -1) {
                LOGERR;                if (r->root_hooks.hook_exec.exception) {
                         if (r->root_hooks.hook_exec.exception(r, NULL))
                                 return NULL;    /* exit from scheduler */
                 } else
                         LOGERR;
 #ifdef NDEBUG  #ifdef NDEBUG
                 /* kevent no exit by error, if non-debug version */                  /* kevent no exit by error, if non-debug version */
                 goto retry;                  goto retry;
Line 334  retry: Line 344  retry:
                                         FD_CLR(TASK_FD(task), &io->rfd);                                          FD_CLR(TASK_FD(task), &io->rfd);
   
                                         TAILQ_REMOVE(&r->root_read, task, task_node);                                          TAILQ_REMOVE(&r->root_read, task, task_node);
/*                                        if (res[i].flags & EV_EOF) {                                        if (r->root_hooks.hook_exec.exception && res[i].flags & EV_EOF) {
                                                task->task_type = taskUNUSE;                                                if (r->root_hooks.hook_exec.exception(r, (void*) EV_EOF)) {
                                                TAILQ_INSERT_TAIL(&r->root_unuse, task, task_node);                                                        task->task_type = taskUNUSE;
                                        } else { */                                                        TAILQ_INSERT_TAIL(&r->root_unuse, task, task_node);
                                                 } else {
                                                         task->task_type = taskREADY;
                                                         TAILQ_INSERT_TAIL(&r->root_ready, task, task_node);
                                                 }
                                         } else {
                                                 task->task_type = taskREADY;                                                  task->task_type = taskREADY;
                                                 TAILQ_INSERT_TAIL(&r->root_ready, task, task_node);                                                  TAILQ_INSERT_TAIL(&r->root_ready, task, task_node);
/*                                      } */                                        }
                                         break;                                          break;
                                 }                                  }
                                 break;                                  break;
Line 353  retry: Line 368  retry:
                                         FD_CLR(TASK_FD(task), &io->wfd);                                          FD_CLR(TASK_FD(task), &io->wfd);
   
                                         TAILQ_REMOVE(&r->root_write, task, task_node);                                          TAILQ_REMOVE(&r->root_write, task, task_node);
/*                                        if (res[i].flags & EV_EOF) {                                        if (r->root_hooks.hook_exec.exception && res[i].flags & EV_EOF) {
                                                task->task_type = taskUNUSE;                                                if (r->root_hooks.hook_exec.exception(r, (void*) EV_EOF)) {
                                                TAILQ_INSERT_TAIL(&r->root_unuse, task, task_node);                                                        task->task_type = taskUNUSE;
                                        } else { */                                                        TAILQ_INSERT_TAIL(&r->root_unuse, task, task_node);
                                                 } else {
                                                         task->task_type = taskREADY;
                                                         TAILQ_INSERT_TAIL(&r->root_ready, task, task_node);
                                                 }
                                         } else {
                                                 task->task_type = taskREADY;                                                  task->task_type = taskREADY;
                                                 TAILQ_INSERT_TAIL(&r->root_ready, task, task_node);                                                  TAILQ_INSERT_TAIL(&r->root_ready, task, task_node);
/*                                      } */                                        }
                                         break;                                          break;
                                 }                                  }
                                 break;                                  break;
                 }                  }
                if (kevent(r->root_kq, evt, 1, NULL, 0, &nw) == -1)                if (kevent(r->root_kq, evt, 1, NULL, 0, &nw) == -1) {
                        LOGERR;                        if (r->root_hooks.hook_exec.exception) {
                                 if (r->root_hooks.hook_exec.exception(r, NULL))
                                         return NULL;    /* exit from scheduler */
                         } else
                                 LOGERR;
                 }
         }          }
   
         /* timer update & put in ready queue */          /* timer update & put in ready queue */
Line 401  retry: Line 426  retry:
         task->task_type = taskUNUSE;          task->task_type = taskUNUSE;
         TAILQ_INSERT_TAIL(&r->root_unuse, task, task_node);          TAILQ_INSERT_TAIL(&r->root_unuse, task, task_node);
         return task;          return task;
   }
   
   /*
    * sched_hook_exception() - Default EXCEPTION hook
    * @root = root task
    * @arg = custom handling: if arg == EV_EOF or other value; default: arg == NULL log errno
    * return: <0 errors and 0 ok
    */
   void *
   sched_hook_exception(void *root, void *arg)
   {
           sched_root_task_t *r = root;
   
           if (!r || !ROOT_DATA(r) || !ROOT_DATLEN(r))
                   return NULL;
   
           /* custom exception handling ... */
           if (arg) {
                   if (arg == (void*) EV_EOF)
                           return NULL;
                   return (void*) -1;      /* raise scheduler error!!! */
           }
   
           /* if error hook exists */
           if (r->root_hooks.hook_root.error)
                   return (r->root_hooks.hook_root.error(root, (void*) errno));
   
           /* default case! */
           LOGERR;
           return NULL;
 }  }

Removed from v.1.1.1.1.2.8  
changed lines
  Added in v.1.2.2.2


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