Diff for /libaitsched/src/tasks.c between versions 1.4.2.3 and 1.7.4.1

version 1.4.2.3, 2012/01/24 14:04:58 version 1.7.4.1, 2012/05/30 08:07:45
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 51  SUCH DAMAGE. Line 51  SUCH DAMAGE.
 inline sched_task_t *  inline sched_task_t *
 _sched_useTask(sched_root_task_t * __restrict root)  _sched_useTask(sched_root_task_t * __restrict root)
 {  {
        sched_task_t *task;        sched_task_t *task, *tmp;
   
        TAILQ_FOREACH(task, &root->root_unuse, task_node) {        TAILQ_FOREACH_SAFE(task, &root->root_unuse, task_node, tmp) {
                 if (!TASK_ISLOCKED(task)) {                  if (!TASK_ISLOCKED(task)) {
 #ifdef HAVE_LIBPTHREAD  #ifdef HAVE_LIBPTHREAD
                         pthread_mutex_lock(&root->root_mtx[taskUNUSE]);                          pthread_mutex_lock(&root->root_mtx[taskUNUSE]);
Line 99  _sched_unuseTask(sched_task_t * __restrict task) Line 99  _sched_unuseTask(sched_task_t * __restrict task)
   
 /*  /*
  * schedRead() - Add READ I/O 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
Line 155  schedRead(sched_root_task_t * __restrict root, sched_t Line 156  schedRead(sched_root_task_t * __restrict root, sched_t
   
 /*  /*
  * schedWrite() - Add WRITE I/O 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
Line 210  schedWrite(sched_root_task_t * __restrict root, sched_ Line 212  schedWrite(sched_root_task_t * __restrict root, sched_
 }  }
   
 /*  /*
    * schedAlarm() - Add ALARM task to scheduler queue
    *
    * @root = root task
    * @func = task execution function
    * @arg = 1st func argument
    * @ts = timeout argument structure
    * @opt_data = Optional data
    * @opt_dlen = Optional data length
    * return: NULL error or !=NULL new queued task
    */
   sched_task_t *
   schedAlarm(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, struct timespec ts, 
                   void *opt_data, size_t opt_dlen)
   {
           sched_task_t *task;
           void *ptr;
   
           if (!root || !func)
                   return NULL;
   
           /* get new task */
           if (!(task = _sched_useTask(root)))
                   return NULL;
   
           memset(task, 0, sizeof(sched_task_t));
           task->task_id = 0;
           task->task_lock = 0;
           task->task_func = func;
           TASK_TYPE(task) = taskALARM;
           TASK_ROOT(task) = root;
   
           TASK_ARG(task) = arg;
           TASK_TS(task) = ts;
   
           TASK_DATA(task) = opt_data;
           TASK_DATLEN(task) = opt_dlen;
   
           if (root->root_hooks.hook_add.alarm)
                   ptr = root->root_hooks.hook_add.alarm(task, NULL);
           else
                   ptr = NULL;
   
           if (!ptr) {
   #ifdef HAVE_LIBPTHREAD
                   pthread_mutex_lock(&root->root_mtx[taskALARM]);
   #endif
                   TAILQ_INSERT_TAIL(&root->root_alarm, task, task_node);
   #ifdef HAVE_LIBPTHREAD
                   pthread_mutex_unlock(&root->root_mtx[taskALARM]);
   #endif
           } else
                   task = _sched_unuseTask(task);
   
           return task;
   }
   
   /*
  * schedTimer() - Add TIMER task to scheduler queue   * schedTimer() - Add TIMER 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
Line 250  schedTimer(sched_root_task_t * __restrict root, sched_ Line 310  schedTimer(sched_root_task_t * __restrict root, sched_
         clock_gettime(CLOCK_MONOTONIC, &now);          clock_gettime(CLOCK_MONOTONIC, &now);
         now.tv_sec += ts.tv_sec;          now.tv_sec += ts.tv_sec;
         now.tv_nsec += ts.tv_nsec;          now.tv_nsec += ts.tv_nsec;
        if (now.tv_nsec >= 1000000000) {        if (now.tv_nsec >= 1000000000L) {
                 now.tv_sec++;                  now.tv_sec++;
                now.tv_nsec -= 1000000000;                now.tv_nsec -= 1000000000L;
         } else if (now.tv_nsec < 0) {          } else if (now.tv_nsec < 0) {
                 now.tv_sec--;                  now.tv_sec--;
                now.tv_nsec += 1000000000;                now.tv_nsec += 1000000000L;
         }          }
         TASK_TS(task) = now;          TASK_TS(task) = now;
   
Line 272  schedTimer(sched_root_task_t * __restrict root, sched_ Line 332  schedTimer(sched_root_task_t * __restrict root, sched_
                 TAILQ_INSERT_TAIL(&root->root_timer, task, task_node);                  TAILQ_INSERT_TAIL(&root->root_timer, task, task_node);
 #else  #else
                 TAILQ_FOREACH(t, &root->root_timer, task_node)                  TAILQ_FOREACH(t, &root->root_timer, task_node)
                        if (timespeccmp(&TASK_TS(task), &TASK_TS(t), -) < 1)                        if (sched_timespeccmp(&TASK_TS(task), &TASK_TS(t), -) < 1)
                                 break;                                  break;
                 if (!t)                  if (!t)
                         TAILQ_INSERT_TAIL(&root->root_timer, task, task_node);                          TAILQ_INSERT_TAIL(&root->root_timer, task, task_node);
Line 290  schedTimer(sched_root_task_t * __restrict root, sched_ Line 350  schedTimer(sched_root_task_t * __restrict root, sched_
   
 /*  /*
  * schedEvent() - Add EVENT task to scheduler queue   * schedEvent() - Add EVENT 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
Line 347  schedEvent(sched_root_task_t * __restrict root, sched_ Line 408  schedEvent(sched_root_task_t * __restrict root, sched_
   
 /*  /*
  * schedEventLo() - Add EVENT_Lo task to scheduler queue   * schedEventLo() - Add EVENT_Lo 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
Line 403  schedEventLo(sched_root_task_t * __restrict root, sche Line 465  schedEventLo(sched_root_task_t * __restrict root, sche
   
 /*  /*
  * schedCallOnce() - Call once from scheduler   * schedCallOnce() - Call once from scheduler
    *
  * @root = root task   * @root = root task
  * @func = task execution function   * @func = task execution function
  * @arg = 1st func argument   * @arg = 1st func argument

Removed from v.1.4.2.3  
changed lines
  Added in v.1.7.4.1


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