Diff for /libaitsched/src/tasks.c between versions 1.10.2.1 and 1.10.2.5

version 1.10.2.1, 2012/08/01 12:49:26 version 1.10.2.5, 2012/08/01 22:12:39
Line 494  schedAlarm(sched_root_task_t * __restrict root, sched_ Line 494  schedAlarm(sched_root_task_t * __restrict root, sched_
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
 sched_task_t *  sched_task_t *
schedAIO(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_long acb, schedAIO(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, 
                void *opt_data, size_t opt_dlen)                struct aiocb * __restrict acb, void *opt_data, size_t opt_dlen)
 {  {
 #ifndef EVFILT_AIO  #ifndef EVFILT_AIO
         sched_SetErr(ENOTSUP, "Not supported kevent() filter");          sched_SetErr(ENOTSUP, "Not supported kevent() filter");
Line 516  schedAIO(sched_root_task_t * __restrict root, sched_ta Line 516  schedAIO(sched_root_task_t * __restrict root, sched_ta
         TASK_ROOT(task) = root;          TASK_ROOT(task) = root;
   
         TASK_ARG(task) = arg;          TASK_ARG(task) = arg;
        TASK_VAL(task) = acb;        TASK_VAL(task) = (u_long) acb;
   
         TASK_DATA(task) = opt_data;          TASK_DATA(task) = opt_data;
         TASK_DATLEN(task) = opt_dlen;          TASK_DATLEN(task) = opt_dlen;
Line 538  schedAIO(sched_root_task_t * __restrict root, sched_ta Line 538  schedAIO(sched_root_task_t * __restrict root, sched_ta
                 task = _sched_unuseTask(task);                  task = _sched_unuseTask(task);
   
         return task;          return task;
   #endif
   }
   
   /*
    * schedAIORead() - Add AIO read task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = file descriptor
    * @buffer = Buffer
    * @buflen = Buffer length
    * return: NULL error or !=NULL new queued task
    */
   inline sched_task_t *
   schedAIORead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd, 
                   void *buffer, size_t buflen)
   {
   #ifndef EVFILT_AIO
           sched_SetErr(ENOTSUP, "Not supported kevent() filter");
           return NULL;
   #else
           struct aiocb *acb;
           off_t off = 0;
   
           if (!root || !func)
                   return NULL;
           else
                   memset(buffer, 0, buflen);
   
           if (!(acb = malloc(sizeof(struct aiocb)))) {
                   LOGERR;
                   return NULL;
           } else
                   memset(acb, 0, sizeof(struct aiocb));
   
           acb->aio_fildes = fd;
           acb->aio_nbytes = buflen;
           acb->aio_buf = buffer;
           off = lseek(fd, 0, SEEK_CUR);
           if (off == -1) {
                   LOGERR;
                   free(acb);
                   return NULL;
           } else
                   acb->aio_offset = off;
           acb->aio_sigevent.sigev_notify = SIGEV_KEVENT;
           acb->aio_sigevent.sigev_notify_kqueue = root->root_kq;
           acb->aio_sigevent.sigev_value.sival_ptr = acb;
   
           if (aio_read(acb)) {
                   LOGERR;
                   free(acb);
                   return NULL;
           }
   
           return schedAIO(root, func, arg, acb, buffer, buflen);
   #endif
   }
   
   /*
    * schedAIOWrite() - Add AIO write task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @fd = file descriptor
    * @buffer = Buffer
    * @buflen = Buffer length
    * return: NULL error or !=NULL new queued task
    */
   inline sched_task_t *
   schedAIOWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd, 
                   void *buffer, size_t buflen)
   {
   #ifndef EVFILT_AIO
           sched_SetErr(ENOTSUP, "Not supported kevent() filter");
           return NULL;
   #else
           struct aiocb *acb;
           off_t off = 0;
   
           if (!root || !func)
                   return NULL;
   
           if (!(acb = malloc(sizeof(struct aiocb)))) {
                   LOGERR;
                   return NULL;
           } else
                   memset(acb, 0, sizeof(struct aiocb));
   
           acb->aio_fildes = fd;
           acb->aio_nbytes = buflen;
           acb->aio_buf = buffer;
           off = lseek(fd, 0, SEEK_CUR);
           if (off == -1) {
                   LOGERR;
                   free(acb);
                   return NULL;
           } else
                   acb->aio_offset = off;
           acb->aio_sigevent.sigev_notify = SIGEV_KEVENT;
           acb->aio_sigevent.sigev_notify_kqueue = root->root_kq;
           acb->aio_sigevent.sigev_value.sival_ptr = acb;
   
           if (aio_write(acb)) {
                   LOGERR;
                   free(acb);
                   return NULL;
           }
   
           return schedAIO(root, func, arg, acb, buffer, buflen);
 #endif  #endif
 }  }
   

Removed from v.1.10.2.1  
changed lines
  Added in v.1.10.2.5


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