Example #1
0
File: 6-3.c Project: Nan619/ltp-ddt
int main(int argc, char *argv[])
{
	struct sigevent ev;
	timer_t tid;
	struct itimerspec its;

	ev.sigev_notify = SIGEV_SIGNAL;
	ev.sigev_signo = SIGCONT;

	if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) {
		perror("timer_create() did not return success\n");
		return PTS_UNRESOLVED;
	}
	if (timer_delete(tid) != 0) {
		perror("timer_delete() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (timer_gettime(tid, &its) == -1) {
		if (EINVAL == errno) {
			printf("fcn returned -1 and errno==EINVAL\n");
			return PTS_PASS;
		} else {
			printf("fcn returned -1 but errno!=EINVAL\n");
			printf("Test FAILED\n");
			return PTS_FAIL;
		}
	}
	printf("fcn did not return -1\n");
	return PTS_PASS;
}
Example #2
0
File: 3-1.c Project: Nan619/ltp-ddt
int main(int argc, char *argv[])
{
	struct sigevent ev;
	timer_t tid;
	struct itimerspec itsset, itsget;
	struct timespec ts;
	int flags = 0;
	int delta;

	ev.sigev_notify = SIGEV_SIGNAL;
	ev.sigev_signo = SIGCONT;

	if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) {
		perror("timer_create() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (clock_gettime(CLOCK_REALTIME, &ts) != 0) {
		perror("clock_gettime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	itsset.it_interval.tv_sec = 0;
	itsset.it_interval.tv_nsec = 0;
	itsset.it_value.tv_sec = ts.tv_sec + TIMERSEC;
	itsset.it_value.tv_nsec = ts.tv_nsec;

	flags |= TIMER_ABSTIME;
	if (timer_settime(tid, flags, &itsset, NULL) != 0) {
		perror("timer_settime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (timer_gettime(tid, &itsget) != 0) {
		perror("timer_gettime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	delta = TIMERSEC - itsget.it_value.tv_sec;

	if (delta < 0) {
		printf("FAIL:  timer_gettime() value > timer_settime()\n");
		printf("%d > %d\n", (int)itsget.it_value.tv_sec,
		       (int)itsset.it_value.tv_sec);
		return PTS_FAIL;
	}

	if (delta <= ACCEPTABLEDELTA) {
		printf("Test PASSED\n");
		return PTS_PASS;
	} else {
		printf("FAIL:  timer_gettime() value !~= timer_settime()\n");
		printf("%d !~= %d\n", (int)itsget.it_value.tv_sec,
		       (int)itsset.it_value.tv_sec);
		return PTS_FAIL;
	}

	printf("This code should not be executed\n");
	return PTS_UNRESOLVED;
}
Example #3
0
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
{
    timer_t host_timer = (timer_t)(long)t->priv;
    struct itimerspec timeout;
    int64_t nearest_delta_us = INT64_MAX;
    int64_t current_us;

    assert(alarm_has_dynticks(t));
    if (!active_timers[QEMU_CLOCK_REALTIME] &&
        !active_timers[QEMU_CLOCK_VIRTUAL] &&
        !active_timers[QEMU_CLOCK_HOST])
        return;

    nearest_delta_us = qemu_next_deadline_dyntick();

    /* check whether a timer is already running */
    if (timer_gettime(host_timer, &timeout)) {
        perror("gettime");
        fprintf(stderr, "Internal timer error: aborting\n");
        exit(1);
    }
    current_us = timeout.it_value.tv_sec * 1000000 + timeout.it_value.tv_nsec/1000;
    if (current_us && current_us <= nearest_delta_us)
        return;

    timeout.it_interval.tv_sec = 0;
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
    timeout.it_value.tv_sec =  nearest_delta_us / 1000000;
    timeout.it_value.tv_nsec = (nearest_delta_us % 1000000) * 1000;
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
        perror("settime");
        fprintf(stderr, "Internal timer error: aborting\n");
        exit(1);
    }
}
Example #4
0
static void dynticks_rearm_timer(struct qemu_alarm_timer *t,
                                 int64_t nearest_delta_ns)
{
    timer_t host_timer = t->timer;
    struct itimerspec timeout;
    int64_t current_ns;

    if (nearest_delta_ns < MIN_TIMER_REARM_NS)
        nearest_delta_ns = MIN_TIMER_REARM_NS;

    /* check whether a timer is already running */
    if (timer_gettime(host_timer, &timeout)) {
        perror("gettime");
        fprintf(stderr, "Internal timer error: aborting\n");
        exit(1);
    }
    current_ns = timeout.it_value.tv_sec * 1000000000LL + timeout.it_value.tv_nsec;
    if (current_ns && current_ns <= nearest_delta_ns)
        return;

    timeout.it_interval.tv_sec = 0;
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
    timeout.it_value.tv_sec =  nearest_delta_ns / 1000000000;
    timeout.it_value.tv_nsec = nearest_delta_ns % 1000000000;
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
        perror("settime");
        fprintf(stderr, "Internal timer error: aborting\n");
        exit(1);
    }
}
Example #5
0
void armIdleTimer(timer_t timerid, struct itimerspec &its) {

	its.it_value.tv_sec = 900;
	its.it_value.tv_nsec = 0;
	its.it_interval.tv_sec = 0;
	its.it_interval.tv_nsec = 0;

	if(timer_settime(timerid, 0, &its, NULL) == -1) {
		logWarning(NetMauMau::Common::Logger::time(TIMEFORMAT) << "Could not arm idle timer");
	} else {

		struct itimerspec itc;
		char *sdStr = 0L;

		if(!timer_gettime(timerid, &itc) &&
				!(itc.it_value.tv_sec == 0 &&
				  itc.it_value.tv_nsec == 0)) {

			time_t now;
			time(&now);
			now += itc.it_value.tv_sec;
			sdStr = std::asctime(std::localtime(&now));

		}

		if(sdStr) logInfo(NetMauMau::Common::Logger::time(TIMEFORMAT) << "Idle timer armed to "
							  << sdStr);
	}
}
Example #6
0
int main(int argc, char *argv[])
{
	struct sigevent ev;
	timer_t tid;
	struct itimerspec its;

	ev.sigev_notify = SIGEV_SIGNAL;
	ev.sigev_signo = SIGCONT;

	if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) {
		perror("timer_create() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (timer_gettime(tid, &its) != 0) {
		perror("timer_gettime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if ( (0 == its.it_value.tv_sec) &&
		(0 == its.it_value.tv_nsec) ) {
		printf("Test PASSED\n");
		return PTS_PASS;
	} else {
		printf("Test FAILED:  tv_sec %d tv_nsec %d\n",
				(int) its.it_value.tv_sec,
				(int) its.it_value.tv_nsec);
		return PTS_FAIL;
	}

	return PTS_UNRESOLVED;
}
int main(void)
{
	timer_t timerid = 0;
	struct itimerspec value;

	return timer_gettime(timerid, &value);
}
Example #8
0
unsigned int alarm
    (
    unsigned int secs
    )
    {
    static timer_t timer_id = NULL;
    struct itimerspec tspec, tremain;
 
    /* if first time, create a timer */
 
    if (!timer_id)
        {
        if (timer_create(CLOCK_REALTIME, NULL, &timer_id) == ERROR)
            return(ERROR);
        }
 
    /* set new time*/
 
    tspec.it_interval.tv_sec = 0;
    tspec.it_interval.tv_nsec = 0;
    tspec.it_value.tv_sec = secs;
    tspec.it_value.tv_nsec = 0;
 
    /* save off timer remaining from previous for return */
 
    timer_gettime(timer_id, &tremain);
    timer_settime(timer_id, CLOCK_REALTIME, &tspec, NULL);
 
    return((unsigned int)tremain.it_value.tv_sec);
    }
Example #9
0
void test( void )
{
  timer_t           timerid = 0;
  struct itimerspec value;
  int               result;

  result = timer_gettime( timerid, &value );
}
Example #10
0
File: 1-2.c Project: Nan619/ltp-ddt
int main(int argc, char *argv[])
{
	struct sigevent ev;
	timer_t tid;
	struct itimerspec itsset, itsget;
	int delta;

	ev.sigev_notify = SIGEV_SIGNAL;
	ev.sigev_signo = SIGCONT;

	itsset.it_interval.tv_sec = 0;
	itsset.it_interval.tv_nsec = 0;
	itsset.it_value.tv_sec = TIMERSEC;
	itsset.it_value.tv_nsec = 0;

	if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) {
		perror("timer_create() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (timer_settime(tid, 0, &itsset, NULL) != 0) {
		perror("timer_settime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (sleep(SLEEPSEC) != 0) {
		perror("sleep() did not return 0\n");
		return PTS_UNRESOLVED;
	}

	if (timer_gettime(tid, &itsget) != 0) {
		perror("timer_gettime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	delta = (itsset.it_value.tv_sec - SLEEPSEC) - itsget.it_value.tv_sec;

	if (delta < 0) {
		printf("FAIL:  timer_gettime() value > time expected left\n");
		printf("%d > %d\n", (int)itsget.it_value.tv_sec,
		       (int)itsset.it_value.tv_sec - SLEEPSEC);
		return PTS_FAIL;
	}

	if (delta <= ACCEPTABLEDELTA) {
		printf("Test PASSED\n");
		return PTS_PASS;
	} else {
		printf("FAIL:  timer_gettime() value !~= time expected left\n");
		printf("%d !~= %d\n", (int)itsget.it_value.tv_sec,
		       (int)itsset.it_value.tv_sec - SLEEPSEC);
		return PTS_FAIL;
	}

	printf("This code should not be executed\n");
	return PTS_UNRESOLVED;
}
Example #11
0
// NOTE: must be called with monitor lock.
static void reschedule_root_alarm(void) {
  bool timer_was_set = timer_set;
  assert(alarms != NULL);

  // If used in a zeroed state, disarms the timer
  struct itimerspec wakeup_time;
  memset(&wakeup_time, 0, sizeof(wakeup_time));

  if (list_is_empty(alarms))
    goto done;

  alarm_t *next = list_front(alarms);
  int64_t next_expiration = next->deadline - now();
  if (next_expiration < TIMER_INTERVAL_FOR_WAKELOCK_IN_MS) {
    if (!timer_set) {
      int status = bt_os_callouts->acquire_wake_lock(WAKE_LOCK_ID);
      if (status != BT_STATUS_SUCCESS) {
        LOG_ERROR("%s unable to acquire wake lock: %d", __func__, status);
        goto done;
      }
    }

    wakeup_time.it_value.tv_sec = (next->deadline / 1000);
    wakeup_time.it_value.tv_nsec = (next->deadline % 1000) * 1000000LL;
  } else {
    if (!bt_os_callouts->set_wake_alarm(next_expiration, true, timer_callback, NULL))
      LOG_ERROR("%s unable to set wake alarm for %" PRId64 "ms.", __func__, next_expiration);
  }

done:
  timer_set = wakeup_time.it_value.tv_sec != 0 || wakeup_time.it_value.tv_nsec != 0;
  if (timer_was_set && !timer_set) {
    bt_os_callouts->release_wake_lock(WAKE_LOCK_ID);
  }

  if (timer_settime(timer, TIMER_ABSTIME, &wakeup_time, NULL) == -1)
    LOG_ERROR("%s unable to set timer: %s", __func__, strerror(errno));

  // If next expiration was in the past (e.g. short timer that got context switched)
  // then the timer might have diarmed itself. Detect this case and work around it
  // by manually signalling the |alarm_expired| semaphore.
  //
  // It is possible that the timer was actually super short (a few milliseconds)
  // and the timer expired normally before we called |timer_gettime|. Worst case,
  // |alarm_expired| is signaled twice for that alarm. Nothing bad should happen in
  // that case though since the callback dispatch function checks to make sure the
  // timer at the head of the list actually expired.
  if (timer_set) {
    struct itimerspec time_to_expire;
    timer_gettime(timer, &time_to_expire);
    if (time_to_expire.it_value.tv_sec == 0 && time_to_expire.it_value.tv_nsec == 0) {
      LOG_ERROR("%s alarm expiration too close for posix timers, switching to guns", __func__);
      semaphore_post(alarm_expired);
    }
  }
}
int RequestInjectionData::getRemainingTime() const {
  if (m_hasTimer) {
    itimerspec ts;
    if (!timer_gettime(m_timer_id, &ts)) {
      int remaining = ts.it_value.tv_sec;
      return remaining > 1 ? remaining : 1;
    }
  }
  return m_timeoutSeconds;
}
Example #13
0
struct itimerspec getTimer(const timer_t timerid) {
	struct itimerspec timeout;

	errno = 0;

	if (timer_gettime(timerid, &timeout) != 0)
		ERREXIT("Cannot set timer: %s", strerror(errno));

	return timeout;
}
Example #14
0
static void
start_stop_timer(timer_t timerid, long interval, bool start)
{
  struct itimerspec its;

  if (start) {
    its.it_value.tv_sec = interval;
    its.it_value.tv_nsec = 0;
  } else {
#ifdef CKPTTIMER_PLUGIN_DEBUG
    if (timer_gettime(timerid, &its) == 0) {
      JTRACE("Time left: it_value, it_interval") (its.it_value.tv_sec)
        (its.it_value.tv_nsec)
        (its.it_interval.tv_sec)
        (its.it_interval.tv_nsec);
    } else {
      handleError("timer_gettime");
    }
#endif // ifdef CKPTTIMER_PLUGIN_DEBUG
    its.it_value.tv_sec = 0;
    its.it_value.tv_nsec = 0;
  }

  its.it_interval.tv_sec = its.it_value.tv_sec;
  its.it_interval.tv_nsec = its.it_value.tv_nsec;

  if (timer_settime(timerid, 0, &its, NULL) == -1) {
    handleError("timer_settime");
  }
#ifdef CKPTTIMER_PLUGIN_DEBUG
  if (!start) {
    if (timer_gettime(timerid, &its) == 0) {
      JTRACE("After disabling: it_value, it_interval") (its.it_value.tv_sec)
        (its.it_value.tv_nsec)
        (its.it_interval.tv_sec)
        (its.it_interval.tv_nsec);
    } else {
      handleError("timer_gettime");
    }
  }
#endif // ifdef CKPTTIMER_PLUGIN_DEBUG
}
int RequestTimer::getRemainingTime() const {
#ifndef __APPLE__
  if (m_hasTimer) {
    itimerspec ts;
    if (!timer_gettime(m_timer_id, &ts)) {
      int remaining = ts.it_value.tv_sec;
      return remaining > 1 ? remaining : 1;
    }
  }
#endif
  return m_timeoutSeconds;
}
Example #16
0
File: 2-2.c Project: Nan619/ltp-ddt
int main(int argc, char *argv[])
{
	struct sigevent ev;
	timer_t tid;
	struct itimerspec itsset, itsget;

	ev.sigev_notify = SIGEV_SIGNAL;
	ev.sigev_signo = SIGCONT;

	itsset.it_interval.tv_sec = 0;
	itsset.it_interval.tv_nsec = 0;
	itsset.it_value.tv_sec = TIMERSEC;
	itsset.it_value.tv_nsec = 0;

	if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) {
		perror("timer_create() did not return success\n");
		return PTS_UNRESOLVED;
	}

	/*
	 * set up timer that will expire
	 */
	if (timer_settime(tid, 0, &itsset, NULL) != 0) {
		perror("timer_settime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	/*
	 * let timer expire (just call sleep())
	 */
	sleep(TIMERSEC + SLEEPDELTA);

	if (timer_gettime(tid, &itsget) != 0) {
		perror("timer_gettime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (0 == itsget.it_value.tv_sec && 0 == itsget.it_value.tv_nsec) {
		printf("Test PASSED\n");
		return PTS_PASS;
	} else {
		printf("Test FAILED:  tv_sec %d tv_nsec %d\n",
		       (int)itsget.it_value.tv_sec,
		       (int)itsget.it_value.tv_nsec);
		return PTS_FAIL;
	}

	printf("This code should not be executed\n");
	return PTS_UNRESOLVED;
}
Example #17
0
File: 1-1.c Project: 1587/ltp
int main(void)
{
	struct sigevent ev;
	timer_t tid;
	struct itimerspec itsset, itsget;
	int delta;

	ev.sigev_notify = SIGEV_SIGNAL;
	ev.sigev_signo = SIGCONT;

	itsset.it_interval.tv_sec = 0;
	itsset.it_interval.tv_nsec = 0;
	itsset.it_value.tv_sec = TIMERSEC;
	itsset.it_value.tv_nsec = 0;

	if (timer_create(CLOCK_REALTIME, &ev, &tid) != 0) {
		perror("timer_create() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (timer_settime(tid, 0, &itsset, NULL) != 0) {
		perror("timer_settime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	if (timer_gettime(tid, &itsget) != 0) {
		perror("timer_gettime() did not return success\n");
		return PTS_UNRESOLVED;
	}

	delta = itsset.it_value.tv_sec - itsget.it_value.tv_sec;

	if (delta < 0) {
		printf("FAIL:  timer_gettime() value > timer_settime()\n");
		printf("%d > %d\n", (int)itsget.it_value.tv_sec,
		       (int)itsset.it_value.tv_sec);
		return PTS_FAIL;
	}

	if (delta <= ACCEPTABLEDELTA) {
		printf("Test PASSED\n");
		return PTS_PASS;
	}

	printf("FAIL:  timer_gettime() value !~= timer_settime()\n");
	printf("%d !~= %d\n", (int)itsget.it_value.tv_sec,
	       (int)itsset.it_value.tv_sec);
	return PTS_FAIL;
}
Example #18
0
bool timer_complete(timer_t * timer)
{
	struct itimerspec curr_val;
	if(timer_gettime(*timer, &curr_val) == -1) {
		perror("\nCould not get time\n");
		exit(EXIT_FAILURE);
	}

	if(curr_val.it_value.tv_nsec == 0 && curr_val.it_value.tv_sec == 0) {
		printf("\nTimer %lx Complete!\n", (long)*timer);
		return true;
	}
	else
		return false;
}
Example #19
0
int32 timer_status (timer_info_t *timer_info)
{
  int current_count = -1;

  struct itimerspec timer_spec;
  
  if ((timer_gettime ((timer_t)(timer_info->handle), &timer_spec)) == 0)
  {
    current_count = timer_info->millisec
                     - ((timer_spec.it_value.tv_sec * 1000)
                         + (timer_spec.it_value.tv_nsec / 1000000));
  }

  return current_count;
}
// Return: 0 if the timer has expired
static int
read_and_restart_timer(int seconds)
{
  int result;
  struct itimerspec current;

  result = timer_gettime(timer, &current);
  if (result != 0) die("timer_gettime() failed");

  if (current.it_value.tv_sec == 0 && current.it_value.tv_nsec == 0)
    {
      set_timer(seconds);
      return 0;
    }

  return 1;
}
Example #21
0
/*
 * waitms: -1 for block until event occurs
 *          0 perform non blocking check
 *          >0 Timeout in milliseconds.
 */
void
PhysicalMedium::interval(int waitms)
{
	int rv;
	struct itimerspec ts;
	struct itimerspec ts_left;

	/* One shot timer, armed with the time after the interval specified */
	timespec_add_ms(&pimpl->curTime, waitms);
	ts.it_interval.tv_sec = 0;
	ts.it_interval.tv_nsec = 0;
	ts.it_value  = pimpl->curTime;


	/* As we are using a timer any adjustments while this asbsolute timer
	 * is armed will also be adjusted. */
	rv = timer_settime(pimpl->timer, TIMER_ABSTIME, &ts, NULL);
	if (rv == -1)
		throw "PhysicalMedium::interval: failed to arm timer";
	do {
		rv = epoll_wait(pimpl->poller.epfd, pimpl->poller.events,
				EPOLL_MAX_EVENTS, waitms);

		if (rv == -1) {
			if (errno != EINTR)
				/* Not EINTR so we do have a problem */
				throw "PhysicalMedium::interval: epoll failure";
		} else {
			//rv is 0 or number of file descriptors to process.
			if (rv) {
				processPollerEvents(rv);
				break;
			}
		}

		if (timer_gettime(pimpl->timer, &ts_left) == -1)
			throw "PhysicalMedium::interval: failed to get timer";

		// Readjust wait ms based on time left.
		waitms = (ts_left.it_value.tv_sec * 1000)
				+ (ts_left.it_value.tv_nsec /  1000000);
	} while(rv > 0 && waitms > 0);
}
static void luasandbox_timer_stop_one(luasandbox_timer * lt, struct timespec * remaining)
{
	static struct timespec zero = {0, 0};
	struct itimerspec its;
	timer_gettime(lt->timer, &its);
	if (remaining) {
		*remaining = its.it_value;
	}

	its.it_value = zero;
	its.it_interval = zero;
	if (timer_settime(lt->timer, 0, &its, NULL) != SUCCESS) {
		TSRMLS_FETCH();
		php_error_docref(NULL TSRMLS_CC, E_WARNING,
			"timer_settime(): %s", strerror(errno));
	}

	// Invalidate the callback structure, delete the timer
	lt->sandbox = NULL;
	// If the timer event handler is running, wait for it to finish
	// before returning to the caller, otherwise the timer event handler
	// may find itself with a dangling pointer in its local scope.
	while (1) {
		if (sem_wait(&lt->semaphore) == SUCCESS) {
			sem_destroy(&lt->semaphore);
			break;
		}
		if (errno != EINTR) {
			TSRMLS_FETCH();
			php_error_docref(NULL TSRMLS_CC, E_WARNING,
				"sem_wait(): %s", strerror(errno));
			break;
		}
	}
	if (timer_delete(lt->timer) != SUCCESS) {
		TSRMLS_FETCH();
		php_error_docref(NULL TSRMLS_CC, E_WARNING,
			"timer_delete(): %s", strerror(errno));
	}
	luasandbox_timer_free(lt);
}
Example #23
0
int
main(int argc, char *argv[])
{
    struct sigevent sev;
    struct itimerspec ts;
    long arg1, arg2, arg3, arg4;
    timer_t tid;
    int j;
    
    if (argc < 2) {
	fprintf(stderr, 
		"Usage: %s secs [nsecs [int-secs [int-nsecs]]]\n", 
		argv[0]);
	exit(EXIT_FAILURE);
    } /* if */

    sev.sigev_notify = SIGEV_NONE;
    if (timer_create(CLOCK_REALTIME, &sev, &tid) == -1) 
	errExit("timer_create");

    arg1 = ts.it_value.tv_sec = atoi(argv[1]);
    arg2 = ts.it_value.tv_nsec = (argc > 2) ? atoi(argv[2]) : 0;
    arg3 = ts.it_interval.tv_sec = (argc > 3) ? atoi(argv[3]) : 0;
    arg4 = ts.it_interval.tv_nsec = (argc > 4) ? atoi(argv[4]) : 0;

    if (timer_settime(tid, 0, &ts, NULL) == -1) errExit("timer_settime");
    
    for (j = 0; ; j++) {
	 usleep(500000);

	 if (timer_gettime(tid, &ts) == -1) errExit("timer_gettime");
	 printf("%d: value=%ld.%09ld(%ld.%09ld); interval=%ld.%09ld(%ld.%09ld)\n", j,
		 (long) ts.it_value.tv_sec, (long) ts.it_value.tv_nsec,
		arg1, arg2,
		 (long) ts.it_interval.tv_sec, 
		(long) ts.it_interval.tv_nsec,
		 arg3, arg4);
    } /* if */

    exit(EXIT_SUCCESS);
} /* main */
Example #24
0
static void luasandbox_timer_stop_one(luasandbox_timer * lt, struct timespec * remaining)
{
	static struct timespec zero = {0, 0};
	struct itimerspec its;
	timer_gettime(lt->timer, &its);
	if (remaining) {
		*remaining = its.it_value;
	}

	its.it_value = zero;
	its.it_interval = zero;
	timer_settime(lt->timer, 0, &its, NULL);

	if (lt->cbdata.type == LUASANDBOX_TIMER_PROFILER) {
		// Invalidate the cbdata, delete the timer
		lt->cbdata.sandbox = NULL;
		timer_delete(lt->timer);
		// If the timer event handler is running, wait for it to finish
		// before returning to the caller, otherwise the timer event handler
		// may find itself with a dangling pointer in its local scope.
		while (sem_wait(&lt->cbdata.semaphore) && errno == EINTR);
		sem_destroy(&lt->cbdata.semaphore);
	} else {
		// Block the signal, delete the timer, flush pending signals, restore
		sigset_t sigset, oldset, pendset;
		siginfo_t info;
		sigemptyset(&sigset);
		sigaddset(&sigset, LUASANDBOX_SIGNAL);
		sigprocmask(SIG_BLOCK, &sigset, &oldset);
		timer_delete(lt->timer);
		while (1) {
			sigpending(&pendset);
			if (!sigismember(&pendset, LUASANDBOX_SIGNAL)) {
				break;
			}
			sigwaitinfo(&sigset, &info);
			luasandbox_timer_handle_signal(LUASANDBOX_SIGNAL, &info, NULL);
		}
		sigprocmask(SIG_SETMASK, &oldset, NULL);
	}
}
Example #25
0
/*
 * reinit_timer - reinitialize interval timer after a clock step.
 */
void
reinit_timer(void)
{
#if !defined(SYS_WINNT) && !defined(VMS)
	ZERO(itimer);
# ifdef HAVE_TIMER_CREATE
	timer_gettime(timer_id, &itimer);
# else
	getitimer(ITIMER_REAL, &itimer);
# endif
	if (itimer.it_value.tv_sec < 0 ||
	    itimer.it_value.tv_sec > (1 << EVENT_TIMEOUT))
		itimer.it_value.tv_sec = (1 << EVENT_TIMEOUT);
	if (itimer.it_value.itv_frac < 0)
		itimer.it_value.itv_frac = 0;
	if (0 == itimer.it_value.tv_sec &&
	    0 == itimer.it_value.itv_frac)
		itimer.it_value.tv_sec = (1 << EVENT_TIMEOUT);
	itimer.it_interval.tv_sec = (1 << EVENT_TIMEOUT);
	itimer.it_interval.itv_frac = 0;
	set_timer_or_die(&itimer);
# endif /* VMS */
}
Example #26
0
/**
* @fn                   :tc_timer_timer_set_get_time
* @brief                :arm/disarm and fetch state of POSIX per-process timer
* @scenario             :arm/disarm and fetch state of POSIX per-process timer
* API's covered         :timer_create, timer_settime, timer_gettime
* Preconditions         :Creation of timer_id(timer_create)
* Postconditions        :none
* @return               :void
*/
static void tc_timer_timer_set_get_time(void)
{
	int ret_chk = ERROR;
	clockid_t clockid = CLOCK_REALTIME;
	struct sigevent st_sigevent;
	struct itimerspec st_timer_spec_set;
	struct itimerspec st_timer_spec_get;
	timer_t timer_id;

	/* Set and enable alarm */
	st_sigevent.sigev_notify = SIGEV_SIGNAL;
	st_sigevent.sigev_signo = sig_no;
	st_sigevent.sigev_value.sival_ptr = &timer_id;
	ret_chk = timer_create(clockid, &st_sigevent, &timer_id);
	TC_ASSERT_NEQ("timer_create", ret_chk, ERROR);
	TC_ASSERT_NOT_NULL("timer_create", timer_id);

	st_timer_spec_set.it_interval.tv_sec = 1;
	st_timer_spec_set.it_interval.tv_nsec = 0;	/* interval; */
	st_timer_spec_set.it_value.tv_sec = 1;
	st_timer_spec_set.it_value.tv_nsec = 0;	/* expire; */

	ret_chk = timer_settime(timer_id, 0, &st_timer_spec_set, NULL);	/* Flag =1 :TIMER_ABSTIME */
	TC_ASSERT_EQ_ERROR_CLEANUP("timer_settime", ret_chk, OK, errno, timer_delete(timer_id));

	usleep(USECINT);

	ret_chk = timer_gettime(timer_id, &st_timer_spec_get);
	TC_ASSERT_EQ_ERROR_CLEANUP("timer_gettime", ret_chk, OK, errno, timer_delete(timer_id));
	TC_ASSERT_GEQ_CLEANUP("timer_gettime", st_timer_spec_get.it_interval.tv_nsec, st_timer_spec_set.it_interval.tv_nsec, timer_delete(timer_id));
	TC_ASSERT_GEQ_CLEANUP("timer_gettime", st_timer_spec_get.it_interval.tv_sec, st_timer_spec_set.it_interval.tv_sec, timer_delete(timer_id));
	TC_ASSERT_GEQ_CLEANUP("timer_gettime", st_timer_spec_get.it_value.tv_sec, st_timer_spec_set.it_value.tv_sec, timer_delete(timer_id));
	TC_ASSERT_GEQ_CLEANUP("timer_gettime", st_timer_spec_get.it_value.tv_nsec, st_timer_spec_set.it_value.tv_nsec, timer_delete(timer_id));

	timer_delete(timer_id);
	TC_SUCCESS_RESULT();
}
Example #27
0
/*
 * reinit_timer - reinitialize interval timer.
 */
void 
reinit_timer(void)
{
#if !defined(SYS_WINNT) && !defined(VMS)
#  if defined(HAVE_TIMER_CREATE) && defined(HAVE_TIMER_SETTIME)
	timer_gettime(ntpd_timerid, &itimer);
	if (itimer.it_value.tv_sec < 0 || itimer.it_value.tv_sec > (1<<EVENT_TIMEOUT)) {
		itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
	}
	if (itimer.it_value.tv_nsec < 0 ) {
		itimer.it_value.tv_nsec = 0;
	}
	if (itimer.it_value.tv_sec == 0 && itimer.it_value.tv_nsec == 0) {
		itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
		itimer.it_value.tv_nsec = 0;
	}
	itimer.it_interval.tv_sec = (1<<EVENT_TIMEOUT);
	itimer.it_interval.tv_nsec = 0;
	timer_settime(ntpd_timerid, 0 /*!TIMER_ABSTIME*/, &itimer, NULL);
#  else
	getitimer(ITIMER_REAL, &itimer);
	if (itimer.it_value.tv_sec < 0 || itimer.it_value.tv_sec > (1<<EVENT_TIMEOUT)) {
		itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
	}
	if (itimer.it_value.tv_usec < 0 ) {
		itimer.it_value.tv_usec = 0;
	}
	if (itimer.it_value.tv_sec == 0 && itimer.it_value.tv_usec == 0) {
		itimer.it_value.tv_sec = (1<<EVENT_TIMEOUT);
		itimer.it_value.tv_usec = 0;
	}
	itimer.it_interval.tv_sec = (1<<EVENT_TIMEOUT);
	itimer.it_interval.tv_usec = 0;
	setitimer(ITIMER_REAL, &itimer, (struct itimerval *)0);
#  endif
# endif /* VMS */
}
static void dynticks_rearm_timer(struct qemu_alarm_timer *t)
{
    timer_t host_timer = t->timer;
    struct itimerspec timeout;
    int64_t nearest_delta_ns = INT64_MAX;
    int64_t current_ns;

    assert(alarm_has_dynticks(t));
    if (!qemu_clock_has_timers(QEMU_CLOCK_REALTIME) &&
        !qemu_clock_has_timers(QEMU_CLOCK_VIRTUAL) &&
        !qemu_clock_has_timers(QEMU_CLOCK_HOST))
        return;

    nearest_delta_ns = qemu_next_alarm_deadline();
    if (nearest_delta_ns < MIN_TIMER_REARM_NS)
        nearest_delta_ns = MIN_TIMER_REARM_NS;

    /* check whether a timer is already running */
    if (timer_gettime(host_timer, &timeout)) {
        perror("gettime");
        fprintf(stderr, "Internal timer error: aborting\n");
        exit(1);
    }
    current_ns = timeout.it_value.tv_sec * 1000000000LL + timeout.it_value.tv_nsec;
    if (current_ns && current_ns <= nearest_delta_ns)
        return;

    timeout.it_interval.tv_sec = 0;
    timeout.it_interval.tv_nsec = 0; /* 0 for one-shot timer */
    timeout.it_value.tv_sec =  nearest_delta_ns / 1000000000;
    timeout.it_value.tv_nsec = nearest_delta_ns % 1000000000;
    if (timer_settime(host_timer, 0 /* RELATIVE */, &timeout, NULL)) {
        perror("settime");
        fprintf(stderr, "Internal timer error: aborting\n");
        exit(1);
    }
}
//------------------------------------------------------------------------------
BOOL timeru_isActive(tTimerHdl timerHdl_p)
{
    tTimeruData*        pData;
    struct itimerspec   remaining;

    // check handle itself, i.e. was the handle initialized before
    if (timerHdl_p == 0)
    {   // timer was not created yet, so it is not active
        return FALSE;
    }
    pData = (tTimeruData*)timerHdl_p;

    // check if timer is running
    timer_gettime(pData->timer, &remaining);

    if ((remaining.it_value.tv_sec == 0) && (remaining.it_value.tv_nsec == 0))
    {
        return FALSE;
    }
    else
    {
        return TRUE;
    }
}
Example #30
0
int fat_open(struct inode* inode) {
	fat_t* fat = (fat_t*) inode->userdata;
	if(unlikely(!fat)) {
		errno = EINVAL;
		return E_ERR;
	}	


	if(fat->entry_sector == 0)
		return E_OK;


	fat->dev->position = fat->entry_sector * fat->bytes_per_sector;
	inode_t* child = NULL;


	
	static char buf[512];
	fat_entry_t* e = (fat_entry_t*) &buf;
	fat_entry_lfn_t* lfn = (fat_entry_lfn_t*) &buf;

	int entry = 0;

	do {

		if(unlikely(fat_check_entry(fat, &entry) == E_ERR))
			break;

		if(vfs_read(fat->dev, &buf, 32) != 32) {
			errno = EIO;
			return E_ERR;
		}


		if(e->name[0] == '\0')
			break;

		child = (inode_t*) kmalloc(sizeof(inode_t), GFP_ATOMIC);
		if(unlikely(!child)) {
			errno = ENOMEM;
			return E_ERR;
		}

		memset(child, 0, sizeof(inode_t));



		child->name = (const char*) kmalloc(FAT_MAXFN, GFP_ATOMIC);
		if(unlikely(!child->name)) {
			kfree((void*) child);

			errno = ENOMEM;
			return E_ERR;
		}

		memset((void*) child->name, 0, FAT_MAXFN);




		if(e->flags == ATTR_LFN) {
			do {
#if CONFIG_LFN
				lfncat(child->name, lfn->name_2, 2);
				lfncat(child->name, lfn->name_1, 6);
				lfncat(child->name, lfn->name_0, 5);
#endif

				if(unlikely(fat_check_entry(fat, &entry) == E_ERR)) {
					kfree((void*) child->name);
					kfree((void*) child);

					errno = ENOENT;
					return E_ERR;
				}

				if(vfs_read(fat->dev, &buf, 32) != 32) {
					kfree((void*) child->name);
					kfree((void*) child);

					errno = EIO;
					return E_ERR;
				}
			} while(lfn->flags == ATTR_LFN);
		}


		if(e->name[0] == '\xE5') {				
			kfree((void*) child->name);
			kfree((void*) child);

			continue;
		}

		if(child->name[0] == '\0')
			fatcat(child->name, e->name, e->extension);
		

		struct inode_childs* cx;
		for(cx = inode->childs; cx; cx = cx->next) {
			if(strcmp(cx->inode->name, child->name) == 0) {
				kfree((void*) child->name);
				kfree((void*) child);

				continue;
			}
		}


		fat_t* fc = (fat_t*) kmalloc(sizeof(fat_t), GFP_USER);
		if(unlikely(!fc)) {
			kfree((void*) child->name);
			kfree((void*) child);

			errno = ENOMEM;
			return E_ERR;
		}

		memcpy(fc, fat, sizeof(fat_t));

		int cluster = (e->cluster_high << 16) | (e->cluster_low & 0xFFFF);
		fc->entry_sector = cluster
					? CLUSTER_TO_SECTOR(fc, cluster) 
					: 0
					;


		child->userdata = (void*) fc;

		child->ino = vfs_inode();
		child->mode = (e->flags & ATTR_DIRECTORY ? S_IFDIR : S_IFREG) |
				(e->flags & ATTR_RDONLY ? 0444 : 0666) & ~current_task->umask;

		child->dev =
		child->rdev =
		child->nlink = 0;

		child->uid = current_task->uid;
		child->gid = current_task->gid;
		child->size = (off64_t) e->size;

		child->atime = 
		child->ctime = 
		child->mtime = timer_gettime();
	
		child->parent = inode;
		child->link = NULL;

		child->childs = NULL;


		if(e->flags & ATTR_DIRECTORY) {
			child->finddir = fat_finddir;
			child->mknod = fat_mknod;
			child->rename = NULL;
			child->unlink = fat_unlink;
			child->open = fat_open;
			child->close = fat_close;
		} else {
			child->read = NULL;
			child->write = NULL;
		}
		
		child->chown = NULL;
		child->chmod = NULL;
		child->ioctl = NULL;
		


		

		cx = (struct inode_childs*) kmalloc(sizeof(struct inode_childs), GFP_KERNEL);
		cx->inode = child;
		cx->next = inode->childs;
		inode->childs = cx;
				
	} while(1);
}