Diff for /libaitsched/src/hooks.c between versions 1.18.4.1 and 1.18.4.2

version 1.18.4.1, 2013/08/15 14:53:49 version 1.18.4.2, 2013/08/15 17:58:31
Line 213  sched_hook_cancel(void *task, void *arg __unused) Line 213  sched_hook_cancel(void *task, void *arg __unused)
 #ifdef HAVE_LIBPTHREAD  #ifdef HAVE_LIBPTHREAD
                         pthread_cancel((pthread_t) TASK_VAL(t));                          pthread_cancel((pthread_t) TASK_VAL(t));
 #endif  #endif
                           return NULL;
                   case taskRTC:
                           timer_delete((timer_t) TASK_DATLEN(t));
                           schedCancel((sched_task_t*) TASK_RET(t));
                           return NULL;
                 default:                  default:
                         return NULL;                          return NULL;
         }          }
Line 1116  sched_hook_condition(void *root, void *arg) Line 1121  sched_hook_condition(void *root, void *arg)
                 return NULL;                  return NULL;
   
         return (void*) (r->root_cond - *(intptr_t*) arg);          return (void*) (r->root_cond - *(intptr_t*) arg);
   }
   
   /*
    * sched_hook_rtc() - Default RTC hook
    *
    * @task = current task
    * @arg = unused
    * return: <0 errors and 0 ok
    */
   void *
   sched_hook_rtc(void *task, void *arg __unused)
   {
           sched_task_t *sigt = NULL, *t = task;
           struct itimerspec its;
           struct sigevent evt;
           timer_t *tmr = NULL;
   
           if (!t || !TASK_ROOT(t))
                   return (void*) -1;
   
           tmr = malloc(sizeof(timer_t));
           if (!tmr) {
                   if (TASK_ROOT(t)->root_hooks.hook_exec.exception)
                           TASK_ROOT(t)->root_hooks.hook_exec.exception(TASK_ROOT(t), NULL);
                   else
                           LOGERR;
                   return (void*) -1;
           }
   
           memset(&evt, 0, sizeof evt);
           evt.sigev_notify = SIGEV_SIGNAL;
           evt.sigev_signo = (int) TASK_DATA(t) + SIGRTMIN;
           evt.sigev_value.sival_ptr = tmr;
   
           if (timer_create((clockid_t) TASK_DATA(t), &evt, evt.sigev_value.sival_ptr) == -1) {
                   if (TASK_ROOT(t)->root_hooks.hook_exec.exception)
                           TASK_ROOT(t)->root_hooks.hook_exec.exception(TASK_ROOT(t), NULL);
                   else
                           LOGERR;
                   if (tmr)
                           free(tmr);
                   return (void*) -1;
           } else
                   TASK_DATLEN(t) = (size_t) *tmr;
   
           if (!(sigt = schedSignal(TASK_ROOT(t), TASK_FUNC(t), TASK_ARG(t), evt.sigev_signo, 
                                   TASK_DATA(t), TASK_DATLEN(t)))) {
                   if (TASK_ROOT(t)->root_hooks.hook_exec.exception)
                           TASK_ROOT(t)->root_hooks.hook_exec.exception(TASK_ROOT(t), NULL);
                   else
                           LOGERR;
                   timer_delete(*tmr);
                   free(tmr);
                   return (void*) -1;
           } else
                   TASK_RET(t) = (uintptr_t) sigt;
   
           memset(&its, 0, sizeof its);
           its.it_value.tv_sec = t->task_val.ts.tv_sec;
           its.it_value.tv_nsec = t->task_val.ts.tv_nsec;
   
           if (timer_settime(*tmr, 0, &its, NULL) == -1) {
                   if (TASK_ROOT(t)->root_hooks.hook_exec.exception)
                           TASK_ROOT(t)->root_hooks.hook_exec.exception(TASK_ROOT(t), NULL);
                   else
                           LOGERR;
                   schedCancel(sigt);
                   timer_delete(*tmr);
                   free(tmr);
                   return (void*) -1;
           }
   
           return NULL;
 }  }

Removed from v.1.18.4.1  
changed lines
  Added in v.1.18.4.2


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