Diff for /libaitsched/src/hooks.c between versions 1.3.4.1 and 1.3.4.2

version 1.3.4.1, 2012/01/08 03:28:26 version 1.3.4.2, 2012/01/24 14:04:58
Line 244  sched_hook_fetch(void *root, void *arg __unused) Line 244  sched_hook_fetch(void *root, void *arg __unused)
         struct sched_IO *io;          struct sched_IO *io;
         sched_root_task_t *r = root;          sched_root_task_t *r = root;
         sched_task_t *task;          sched_task_t *task;
        struct timeval now, m, mtmp;        struct timespec now, m, mtmp;
        struct timespec nw, *timeout;        struct timespec *timeout;
         struct kevent evt[1], res[KQ_EVENTS];          struct kevent evt[1], res[KQ_EVENTS];
         register int i;          register int i;
         int en;          int en;
Line 293  retry: Line 293  retry:
         }          }
   
 #ifdef TIMER_WITHOUT_SORT  #ifdef TIMER_WITHOUT_SORT
        clock_gettime(CLOCK_MONOTONIC, &nw);        clock_gettime(CLOCK_MONOTONIC, &now);
        now.tv_sec = nw.tv_sec; 
        now.tv_usec = nw.tv_nsec / 1000; 
   
        timerclear(&r->root_wait);        timespecclear(&r->root_wait);
         TAILQ_FOREACH(task, &r->root_timer, task_node) {          TAILQ_FOREACH(task, &r->root_timer, task_node) {
                if (!timerisset(&r->root_wait))                if (!timespecisset(&r->root_wait))
                        r->root_wait = TASK_TV(task);                        r->root_wait = TASK_TS(task);
                else if (timercmp(&TASK_TV(task), &r->root_wait, -) < 0)                else if (timespeccmp(&TASK_TS(task), &r->root_wait, -) < 0)
                        r->root_wait = TASK_TV(task);                        r->root_wait = TASK_TS(task);
         }          }
   
         if (TAILQ_FIRST(&r->root_timer)) {          if (TAILQ_FIRST(&r->root_timer)) {
                 m = r->root_wait;                  m = r->root_wait;
                timersub(&m, &now, &mtmp);                timespecsub(&m, &now, &mtmp);
                 r->root_wait = mtmp;                  r->root_wait = mtmp;
         } else {          } else {
                 /* set wait INFTIM */                  /* set wait INFTIM */
Line 315  retry: Line 313  retry:
         }          }
 #else  #else
         if (!TAILQ_FIRST(&r->root_eventlo) && (task = TAILQ_FIRST(&r->root_timer))) {          if (!TAILQ_FIRST(&r->root_eventlo) && (task = TAILQ_FIRST(&r->root_timer))) {
                clock_gettime(CLOCK_MONOTONIC, &nw);                clock_gettime(CLOCK_MONOTONIC, &now);
                now.tv_sec = nw.tv_sec; 
                now.tv_usec = nw.tv_nsec / 1000; 
   
                m = TASK_TV(task);                m = TASK_TS(task);
                timersub(&m, &now, &mtmp);                timespecsub(&m, &now, &mtmp);
                 r->root_wait = mtmp;                  r->root_wait = mtmp;
         } else {          } else {
                 /* set wait INFTIM */                  /* set wait INFTIM */
                r->root_wait.tv_sec = r->root_wait.tv_usec = -1;                r->root_wait.tv_sec = r->root_wait.tv_nsec = -1;
         }          }
 #endif  #endif
         /* if present member of eventLo, set NOWAIT */          /* if present member of eventLo, set NOWAIT */
         if (TAILQ_FIRST(&r->root_eventlo))          if (TAILQ_FIRST(&r->root_eventlo))
                timerclear(&r->root_wait);                timespecclear(&r->root_wait);
   
        if (r->root_wait.tv_sec != -1 && r->root_wait.tv_usec != -1) {        if (r->root_wait.tv_sec != -1 && r->root_wait.tv_nsec != -1)
                nw.tv_sec = r->root_wait.tv_sec;                timeout = &r->root_wait;
                nw.tv_nsec = r->root_wait.tv_usec * 1000;        else    /* wait INFTIM */
                timeout = &nw; 
        } 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) {
                 if (r->root_hooks.hook_exec.exception) {                  if (r->root_hooks.hook_exec.exception) {
Line 352  retry: Line 346  retry:
 #endif  #endif
         }          }
   
        nw.tv_sec = nw.tv_nsec = 0;        now.tv_sec = now.tv_nsec = 0;
         /* Go and catch the cat into pipes ... */          /* Go and catch the cat into pipes ... */
         for (i = 0; i < en; i++) {          for (i = 0; i < en; i++) {
                 memcpy(evt, &res[i], sizeof evt);                  memcpy(evt, &res[i], sizeof evt);
Line 456  retry: Line 450  retry:
                                 }                                  }
                                 break;                                  break;
                 }                  }
                if (kevent(r->root_kq, evt, 1, NULL, 0, &nw) == -1) {                if (kevent(r->root_kq, evt, 1, NULL, 0, &now) == -1) {
                         if (r->root_hooks.hook_exec.exception) {                          if (r->root_hooks.hook_exec.exception) {
                                 if (r->root_hooks.hook_exec.exception(r, NULL))                                  if (r->root_hooks.hook_exec.exception(r, NULL))
                                         return NULL;                                          return NULL;
Line 466  retry: Line 460  retry:
         }          }
   
         /* timer update & put in ready queue */          /* timer update & put in ready queue */
        clock_gettime(CLOCK_MONOTONIC, &nw);        clock_gettime(CLOCK_MONOTONIC, &now);
        now.tv_sec = nw.tv_sec; 
        now.tv_usec = nw.tv_nsec / 1000; 
   
         TAILQ_FOREACH(task, &r->root_timer, task_node)          TAILQ_FOREACH(task, &r->root_timer, task_node)
                if (timercmp(&now, &TASK_TV(task), -) >= 0) {                if (timespeccmp(&now, &TASK_TS(task), -) >= 0) {
 #ifdef HAVE_LIBPTHREAD  #ifdef HAVE_LIBPTHREAD
                         pthread_mutex_lock(&r->root_mtx[taskTIMER]);                          pthread_mutex_lock(&r->root_mtx[taskTIMER]);
 #endif  #endif

Removed from v.1.3.4.1  
changed lines
  Added in v.1.3.4.2


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