コード例 #1
0
ファイル: timeval.c プロジェクト: macauleycheng/aos-dpctl
static void
sigalrm_handler(int sig_nr)
{
    tick = true;
    if (deadline != TIME_MIN && time(0) > deadline) {
        fatal_signal_handler(sig_nr);
    }
}
コード例 #2
0
ファイル: timeval.c プロジェクト: ecks/harry
static void
sigalrm_handler(int sig_nr)
{
    tick = true;
    printf("handled signal: %d\n", sig_nr);
    if (deadline != TIME_MIN && time(0) > deadline) {
        printf("calling fatal_signal_handler\n");
        fatal_signal_handler(sig_nr);
    }
}
コード例 #3
0
ファイル: timeval.c プロジェクト: PatrickGuo/ovs-2.1.3
/* Like poll(), except:
 *
 *      - The timeout is specified as an absolute time, as defined by
 *        time_msec(), instead of a duration.
 *
 *      - On error, returns a negative error code (instead of setting errno).
 *
 *      - If interrupted by a signal, retries automatically until the original
 *        timeout is reached.  (Because of this property, this function will
 *        never return -EINTR.)
 *
 * Stores the number of milliseconds elapsed during poll in '*elapsed'. */
int
time_poll(struct pollfd *pollfds, int n_pollfds, long long int timeout_when,
          int *elapsed)
{
    long long int *last_wakeup = last_wakeup_get();
    long long int start;
    int retval;

    time_init();
    coverage_clear();
    coverage_run();
    if (*last_wakeup) {
        log_poll_interval(*last_wakeup);
    }
    start = time_msec();

    timeout_when = MIN(timeout_when, deadline);

    for (;;) {
        long long int now = time_msec();
        int time_left;

        if (now >= timeout_when) {
            time_left = 0;
        } else if ((unsigned long long int) timeout_when - now > INT_MAX) {
            time_left = INT_MAX;
        } else {
            time_left = timeout_when - now;
        }

        retval = poll(pollfds, n_pollfds, time_left);
        if (retval < 0) {
            retval = -errno;
        }

        if (deadline <= time_msec()) {
            fatal_signal_handler(SIGALRM);
            if (retval < 0) {
                retval = 0;
            }
            break;
        }

        if (retval != -EINTR) {
            break;
        }
    }
    *last_wakeup = time_msec();
    refresh_rusage();
    *elapsed = *last_wakeup - start;
    return retval;
}