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

version 1.10.2.10, 2012/08/02 12:58:02 version 1.10.2.11, 2012/08/02 13:45:02
Line 109  sched_hook_cancel(void *task, void *arg __unused) Line 109  sched_hook_cancel(void *task, void *arg __unused)
         struct timespec timeout = { 0, 0 };          struct timespec timeout = { 0, 0 };
 #ifdef AIO_SUPPORT  #ifdef AIO_SUPPORT
         struct aiocb *acb;          struct aiocb *acb;
   #ifdef EVFILT_LIO
           struct aiocb **acbs;
           register int i;
   #endif  /* EVFILT_LIO */
 #endif  /* AIO_SUPPORT */  #endif  /* AIO_SUPPORT */
   
         if (!t || !TASK_ROOT(t))          if (!t || !TASK_ROOT(t))
Line 174  sched_hook_cancel(void *task, void *arg __unused) Line 178  sched_hook_cancel(void *task, void *arg __unused)
                                 TASK_VAL(t) = 0;                                  TASK_VAL(t) = 0;
                         }                          }
                         break;                          break;
   #ifdef EVFILT_LIO
                   case taskLIO:
   #ifdef __NetBSD__
                           EV_SET(&chg[0], TASK_VAL(t), EVFILT_LIO, EV_DELETE, 0, 0, (intptr_t) TASK_VAL(t));
   #else
                           EV_SET(&chg[0], TASK_VAL(t), EVFILT_LIO, EV_DELETE, 0, 0, (void*) TASK_VAL(t));
   #endif
                           acbs = (struct aiocb**) TASK_VAL(t);
                           if (acbs) {
                                   for (i = 0; i < TASK_DATLEN(t); i++) {
                                           if (aio_cancel(acbs[i]->aio_fildes, acbs[i]) == AIO_CANCELED)
                                                   aio_return(acbs[i]);
                                           free(acbs[i]);
                                   }
                                   free(acbs);
                                   TASK_VAL(t) = 0;
                           }
                           break;
   #endif  /* EVFILT_LIO */
 #endif  /* AIO_SUPPORT */  #endif  /* AIO_SUPPORT */
 #ifdef EVFILT_USER  #ifdef EVFILT_USER
                 case taskUSER:                  case taskUSER:
Line 784  sched_hook_fetch(void *root, void *arg __unused) Line 807  sched_hook_fetch(void *root, void *arg __unused)
                                 break;                                  break;
 #ifdef AIO_SUPPORT  #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);
Line 810  sched_hook_fetch(void *root, void *arg __unused) Line 830  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
#ifdef EVFILT_LIO                                        fd = acb->aio_fildes;
                                        if (res[i].filter == EVFILT_LIO) {                                        if ((len = aio_return(acb)) != -1) {
                                                acbs = (struct aiocb**) TASK_VAL(task);                                                if (lseek(fd, acb->aio_offset + len, SEEK_CUR) == -1)
                                                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
#endif  /* EVFILT_LIO */                                                LOGERR;
                                        {                                        free(acb);
                                                fd = acb->aio_fildes;                                        TASK_DATLEN(task) = (u_long) len;
                                                if ((len = aio_return(acb)) != -1) {                                        TASK_FD(task) = fd;
                                                        if (lseek(fd, acb->aio_offset + len, SEEK_CUR) == -1)                                }
                                                                LOGERR;                                /* if match at least 2, don't remove resouce of event */
                                                } else                                if (flg > 1)
                                                        LOGERR;                                        evt->flags ^= evt->flags;
                                break;
                                                free(acb);#ifdef EVFILT_LIO
                         case EVFILT_LIO:
                                 flg = 0;
                                 TAILQ_FOREACH_SAFE(task, &r->root_lio, task_node, tmp) {
                                         acbs = (struct aiocb**) TASK_VAL(task);
                                         if (acbs != ((struct aiocb**) res[i].udata))
                                                 continue;
                                         else
                                                 flg++;
                                         /* remove user handle */
 #ifdef HAVE_LIBPTHREAD
                                         pthread_mutex_lock(&r->root_mtx[taskLIO]);
 #endif
                                         TAILQ_REMOVE(&r->root_lio, task, task_node);
 #ifdef HAVE_LIBPTHREAD
                                         pthread_mutex_unlock(&r->root_mtx[taskLIO]);
 #endif
                                         task->task_type = taskREADY;
 #ifdef HAVE_LIBPTHREAD
                                         pthread_mutex_lock(&r->root_mtx[taskREADY]);
 #endif
                                         TAILQ_INSERT_TAIL(&r->root_ready, task, task_node);
 #ifdef HAVE_LIBPTHREAD
                                         pthread_mutex_unlock(&r->root_mtx[taskREADY]);
 #endif
                                         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);
                                         TASK_DATLEN(task) = (u_long) len;                                          TASK_DATLEN(task) = (u_long) len;
                                         TASK_FD(task) = fd;                                          TASK_FD(task) = fd;
   
                                           if (lseek(fd, off + len, SEEK_CUR) == -1)
                                                   LOGERR;
                                 }                                  }
                                 /* 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_LIO */
 #endif  /* AIO_SUPPORT */  #endif  /* AIO_SUPPORT */
 #ifdef EVFILT_USER  #ifdef EVFILT_USER
                         case EVFILT_USER:                          case EVFILT_USER:

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


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