Diff for /libaitsched/src/tasks.c between versions 1.1.1.1 and 1.2.2.1

version 1.1.1.1, 2011/08/05 15:52:00 version 1.2.2.1, 2011/10/04 20:12:01
Line 47  SUCH DAMAGE. Line 47  SUCH DAMAGE.
   
   
 /*  /*
 * schedRead() - Add READ task to scheduler queue * schedRead() - Add READ I/O task to scheduler queue
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
 * @... = next func arguments, like fd handle * @fd = fd handle
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
 sched_task_t *  sched_task_t *
schedRead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...)schedRead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd)
 {  {
         sched_task_t *task;          sched_task_t *task;
         void *ptr;          void *ptr;
         va_list lst;  
   
         if (!root || !func)          if (!root || !func)
                 return NULL;                  return NULL;
Line 82  schedRead(sched_root_task_t * __restrict root, sched_t Line 81  schedRead(sched_root_task_t * __restrict root, sched_t
         task->task_func = func;          task->task_func = func;
   
         TASK_ARG(task) = arg;          TASK_ARG(task) = arg;
        va_start(lst, arg);        TASK_FD(task) = fd;
        TASK_FD(task) = va_arg(lst, int); 
        va_end(lst); 
   
         if (root->root_hooks.hook_add.read)          if (root->root_hooks.hook_add.read)
                 ptr = root->root_hooks.hook_add.read(task, NULL);                  ptr = root->root_hooks.hook_add.read(task, NULL);
Line 103  schedRead(sched_root_task_t * __restrict root, sched_t Line 100  schedRead(sched_root_task_t * __restrict root, sched_t
 }  }
   
 /*  /*
 * schedWrite() - Add WRITE task to scheduler queue * schedWrite() - Add WRITE I/O task to scheduler queue
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
 * @... = next func arguments, like fd handle * @fd = fd handle
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
 sched_task_t *  sched_task_t *
schedWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...)schedWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd)
 {  {
         sched_task_t *task;          sched_task_t *task;
         void *ptr;          void *ptr;
         va_list lst;  
   
         if (!root || !func)          if (!root || !func)
                 return NULL;                  return NULL;
Line 138  schedWrite(sched_root_task_t * __restrict root, sched_ Line 134  schedWrite(sched_root_task_t * __restrict root, sched_
         task->task_func = func;          task->task_func = func;
   
         TASK_ARG(task) = arg;          TASK_ARG(task) = arg;
        va_start(lst, arg);        TASK_FD(task) = fd;
        TASK_FD(task) = va_arg(lst, int); 
        va_end(lst); 
   
         if (root->root_hooks.hook_add.write)          if (root->root_hooks.hook_add.write)
                 ptr = root->root_hooks.hook_add.write(task, NULL);                  ptr = root->root_hooks.hook_add.write(task, NULL);
Line 163  schedWrite(sched_root_task_t * __restrict root, sched_ Line 157  schedWrite(sched_root_task_t * __restrict root, sched_
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
 * @... = next func arguments in microSecs, define period 1sec == 1000000 * @tv = timeout argument structure
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
 sched_task_t *  sched_task_t *
schedTimer(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...)schedTimer(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, struct timeval tv)
 {  {
         sched_task_t *task, *t = NULL;          sched_task_t *task, *t = NULL;
         void *ptr;          void *ptr;
         va_list lst;  
         struct timeval now;          struct timeval now;
         struct timespec nw;          struct timespec nw;
         u_int tim;  
   
         if (!root || !func)          if (!root || !func)
                 return NULL;                  return NULL;
Line 197  schedTimer(sched_root_task_t * __restrict root, sched_ Line 189  schedTimer(sched_root_task_t * __restrict root, sched_
         task->task_func = func;          task->task_func = func;
   
         TASK_ARG(task) = arg;          TASK_ARG(task) = arg;
         va_start(lst, arg);  
         tim = va_arg(lst, u_int);  
         va_end(lst);  
   
         /* calculate timeval structure */          /* calculate timeval structure */
         clock_gettime(CLOCK_MONOTONIC, &nw);          clock_gettime(CLOCK_MONOTONIC, &nw);
        now.tv_sec = nw.tv_sec + tim / 1000000;        now.tv_sec = nw.tv_sec + tv.tv_sec;
        now.tv_usec = nw.tv_nsec / 1000 + (tim % 1000000);        now.tv_usec = nw.tv_nsec / 1000 + tv.tv_usec;
         if (now.tv_usec >= 1000000) {          if (now.tv_usec >= 1000000) {
                 now.tv_sec++;                  now.tv_sec++;
                 now.tv_usec -= 1000000;                  now.tv_usec -= 1000000;
Line 245  schedTimer(sched_root_task_t * __restrict root, sched_ Line 234  schedTimer(sched_root_task_t * __restrict root, sched_
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
 * @... = next func arguments, like u_long * @val = additional func argument
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
 sched_task_t *  sched_task_t *
schedEvent(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...)schedEvent(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_long val)
 {  {
         sched_task_t *task;          sched_task_t *task;
         void *ptr;          void *ptr;
         va_list lst;  
   
         if (!root || !func)          if (!root || !func)
                 return NULL;                  return NULL;
Line 276  schedEvent(sched_root_task_t * __restrict root, sched_ Line 264  schedEvent(sched_root_task_t * __restrict root, sched_
         task->task_func = func;          task->task_func = func;
   
         TASK_ARG(task) = arg;          TASK_ARG(task) = arg;
        va_start(lst, arg);        TASK_VAL(task) = val;
        TASK_VAL(task) = va_arg(lst, u_long); 
        va_end(lst); 
   
         if (root->root_hooks.hook_add.event)          if (root->root_hooks.hook_add.event)
                 ptr = root->root_hooks.hook_add.event(task, NULL);                  ptr = root->root_hooks.hook_add.event(task, NULL);
Line 302  schedEvent(sched_root_task_t * __restrict root, sched_ Line 288  schedEvent(sched_root_task_t * __restrict root, sched_
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
 * @... = next func arguments, like u_long * @val = additional func argument
  * return: NULL error or !=NULL new queued task   * return: NULL error or !=NULL new queued task
  */   */
 sched_task_t *  sched_task_t *
schedEventLo(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...)schedEventLo(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_long val)
 {  {
         sched_task_t *task;          sched_task_t *task;
         void *ptr;          void *ptr;
         va_list lst;  
   
         if (!root || !func)          if (!root || !func)
                 return NULL;                  return NULL;
Line 333  schedEventLo(sched_root_task_t * __restrict root, sche Line 318  schedEventLo(sched_root_task_t * __restrict root, sche
         task->task_func = func;          task->task_func = func;
   
         TASK_ARG(task) = arg;          TASK_ARG(task) = arg;
        va_start(lst, arg);        TASK_VAL(task) = val;
        TASK_VAL(task) = va_arg(lst, u_long); 
        va_end(lst); 
   
         if (root->root_hooks.hook_add.eventlo)          if (root->root_hooks.hook_add.eventlo)
                 ptr = root->root_hooks.hook_add.eventlo(task, NULL);                  ptr = root->root_hooks.hook_add.eventlo(task, NULL);
Line 358  schedEventLo(sched_root_task_t * __restrict root, sche Line 341  schedEventLo(sched_root_task_t * __restrict root, sche
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument
 * @... = next func arguments, like u_long * @val = additional func argument
 * return: NULL error or !=NULL new queued task * return: return value from called func
  */   */
 sched_task_t *  sched_task_t *
schedCallOnce(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...)schedCallOnce(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_long val)
 {  {
         sched_task_t *task;          sched_task_t *task;
        va_list lst;        void *ret;
   
         if (!root || !func)          if (!root || !func)
                 return NULL;                  return NULL;
Line 388  schedCallOnce(sched_root_task_t * __restrict root, sch Line 371  schedCallOnce(sched_root_task_t * __restrict root, sch
         task->task_func = func;          task->task_func = func;
   
         TASK_ARG(task) = arg;          TASK_ARG(task) = arg;
        va_start(lst, arg);        TASK_VAL(task) = val;
        TASK_VAL(task) = va_arg(lst, u_long); 
        va_end(lst); 
   
        if (schedCall(task)) {        ret = schedCall(task);
                task->task_type = taskUNUSE; 
                TAILQ_INSERT_TAIL(&root->root_unuse, task, task_node); 
                task = NULL; 
        } 
   
        return task;        task->task_type = taskUNUSE;
         TAILQ_INSERT_TAIL(&root->root_unuse, task, task_node);
         return ret;
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.2.2.1


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