Diff for /libaitsched/src/hooks.c between versions 1.10.2.4 and 1.10.2.10

version 1.10.2.4, 2012/08/01 14:49:37 version 1.10.2.10, 2012/08/02 12:58:02
Line 107  sched_hook_cancel(void *task, void *arg __unused) Line 107  sched_hook_cancel(void *task, void *arg __unused)
         sched_task_t *t = task;          sched_task_t *t = task;
         struct kevent chg[1];          struct kevent chg[1];
         struct timespec timeout = { 0, 0 };          struct timespec timeout = { 0, 0 };
#ifdef EVFILT_AIO#ifdef AIO_SUPPORT
         struct aiocb *acb;          struct aiocb *acb;
#endif#endif  /* AIO_SUPPORT */
   
         if (!t || !TASK_ROOT(t))          if (!t || !TASK_ROOT(t))
                 return (void*) -1;                  return (void*) -1;
Line 159  sched_hook_cancel(void *task, void *arg __unused) Line 159  sched_hook_cancel(void *task, void *arg __unused)
                         EV_SET(&chg[0], TASK_VAL(t), EVFILT_SIGNAL, EV_DELETE, 0, 0, (void*) TASK_VAL(t));                          EV_SET(&chg[0], TASK_VAL(t), EVFILT_SIGNAL, EV_DELETE, 0, 0, (void*) TASK_VAL(t));
 #endif  #endif
                         break;                          break;
#ifdef EVFILT_AIO#ifdef AIO_SUPPORT
                 case taskAIO:                  case taskAIO:
 #ifdef __NetBSD__  #ifdef __NetBSD__
                         EV_SET(&chg[0], TASK_VAL(t), EVFILT_AIO, EV_DELETE, 0, 0, (intptr_t) TASK_VAL(t));                          EV_SET(&chg[0], TASK_VAL(t), EVFILT_AIO, EV_DELETE, 0, 0, (intptr_t) TASK_VAL(t));
Line 168  sched_hook_cancel(void *task, void *arg __unused) Line 168  sched_hook_cancel(void *task, void *arg __unused)
 #endif  #endif
                         acb = (struct aiocb*) TASK_VAL(t);                          acb = (struct aiocb*) TASK_VAL(t);
                         if (acb) {                          if (acb) {
                                aio_cancel(acb->aio_fildes, acb);                                if (aio_cancel(acb->aio_fildes, acb) == AIO_CANCELED)
                                         aio_return(acb);
                                 free(acb);                                  free(acb);
                                 TASK_VAL(t) = 0;                                  TASK_VAL(t) = 0;
                         }                          }
                         break;                          break;
#endif#endif  /* AIO_SUPPORT */
 #ifdef EVFILT_USER  #ifdef EVFILT_USER
                 case taskUSER:                  case taskUSER:
 #ifdef __NetBSD__  #ifdef __NetBSD__
Line 453  sched_hook_fetch(void *root, void *arg __unused) Line 454  sched_hook_fetch(void *root, void *arg __unused)
         struct kevent evt[1], res[KQ_EVENTS];          struct kevent evt[1], res[KQ_EVENTS];
         register int i, flg;          register int i, flg;
         int en;          int en;
#ifdef EVFILT_AIO#ifdef AIO_SUPPORT
        int len;        int len, fd;
         struct aiocb *acb;          struct aiocb *acb;
#endif#ifdef EVFILT_LIO
         int l;
         register int j;
         off_t off;
         struct aiocb **acbs;
         struct iovec *iv;
 #endif  /* EVFILT_LIO */
 #endif  /* AIO_SUPPORT */
   
         if (!r)          if (!r)
                 return NULL;                  return NULL;
Line 774  sched_hook_fetch(void *root, void *arg __unused) Line 782  sched_hook_fetch(void *root, void *arg __unused)
                                 if (flg > 1)                                  if (flg > 1)
                                         evt->flags ^= evt->flags;                                          evt->flags ^= evt->flags;
                                 break;                                  break;
#ifdef EVFILT_AIO#ifdef AIO_SUPPORT
                         case EVFILT_AIO:                          case EVFILT_AIO:
   #ifdef EVFILT_LIO
                           case EVFILT_LIO:
   #endif  /* EVFILT_LIO */
                                 flg = 0;                                  flg = 0;
                                 TAILQ_FOREACH_SAFE(task, &r->root_aio, task_node, tmp) {                                  TAILQ_FOREACH_SAFE(task, &r->root_aio, task_node, tmp) {
                                         acb = (struct aiocb*) TASK_VAL(task);                                          acb = (struct aiocb*) TASK_VAL(task);
                                        if (acb != ((struct aiocb*) res[i].ident) ||                                         if (acb != ((struct aiocb*) res[i].udata))
                                                        acb->aio_sigevent.sigev_value.sival_ptr != res[i].udata) 
                                                 continue;                                                  continue;
                                         else                                          else
                                                 flg++;                                                  flg++;
Line 800  sched_hook_fetch(void *root, void *arg __unused) Line 810  sched_hook_fetch(void *root, void *arg __unused)
 #ifdef HAVE_LIBPTHREAD  #ifdef HAVE_LIBPTHREAD
                                         pthread_mutex_unlock(&r->root_mtx[taskREADY]);                                          pthread_mutex_unlock(&r->root_mtx[taskREADY]);
 #endif  #endif
                                        if ((len = aio_return(acb)) != -1) {#ifdef EVFILT_LIO
                                                if (lseek(acb->aio_fildes, acb->aio_offset + len,                                         if (res[i].filter == EVFILT_LIO) {
                                                                        SEEK_CUR) == -1)                                                acbs = (struct aiocb**) TASK_VAL(task);
                                                 iv = (struct iovec*) TASK_DATA(task);
                                                 fd = acbs[0]->aio_fildes;
                                                 off = acbs[0]->aio_offset;
                                                 for (j = len = 0; i < TASK_DATLEN(task); len += l, i++) {
                                                         if ((iv[i].iov_len = aio_return(acbs[i])) == -1)
                                                                 l = 0;
                                                         else
                                                                 l = iv[i].iov_len;
                                                         free(acbs[i]);
                                                 }
                                                 free(acbs);
                                                 if (lseek(fd, off + len, SEEK_CUR) == -1)
                                                         LOGERR;                                                          LOGERR;
                                         } else                                          } else
                                                LOGERR;#endif  /* EVFILT_LIO */
                                         {
                                                 fd = acb->aio_fildes;
                                                 if ((len = aio_return(acb)) != -1) {
                                                         if (lseek(fd, acb->aio_offset + len, SEEK_CUR) == -1)
                                                                 LOGERR;
                                                 } else
                                                         LOGERR;
   
                                        free(acb);                                                free(acb);
                                        TASK_VAL(task) = (u_long) len;                                        }
                                         TASK_DATLEN(task) = (u_long) len;
                                         TASK_FD(task) = fd;
                                 }                                  }
                                 /* if match at least 2, don't remove resouce of event */                                  /* if match at least 2, don't remove resouce of event */
                                 if (flg > 1)                                  if (flg > 1)
                                         evt->flags ^= evt->flags;                                          evt->flags ^= evt->flags;
                                 break;                                  break;
#endif  /* EVFILT_AIO */#endif  /* AIO_SUPPORT */
 #ifdef EVFILT_USER  #ifdef EVFILT_USER
                         case EVFILT_USER:                          case EVFILT_USER:
                                 flg = 0;                                  flg = 0;

Removed from v.1.10.2.4  
changed lines
  Added in v.1.10.2.10


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