From: Clemens Ladisch Date: Mon, 14 Jan 2008 07:51:45 +0000 (+0100) Subject: check availability of CLOCK_MONOTONIC X-Git-Tag: v1.0.16rc1~9 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=0e8a2599143c71a20d043e458f2a9fa3be4efeaa;p=alsa-lib.git check availability of CLOCK_MONOTONIC Use monotonic timestamps only after checking that CLOCK_MONOTONIC is actually supported by the C library. --- diff --git a/src/pcm/pcm_file.c b/src/pcm/pcm_file.c index 89f8b751..4b8eaa5c 100644 --- a/src/pcm/pcm_file.c +++ b/src/pcm/pcm_file.c @@ -412,7 +412,9 @@ int snd_pcm_file_open(snd_pcm_t **pcmp, const char *name, snd_pcm_t *pcm; snd_pcm_file_t *file; snd_pcm_file_format_t format; + struct timespec timespec; int err; + assert(pcmp); if (fmt == NULL || strcmp(fmt, "raw") == 0) @@ -467,7 +469,11 @@ int snd_pcm_file_open(snd_pcm_t **pcmp, const char *name, pcm->poll_fd = slave->poll_fd; pcm->poll_events = slave->poll_events; pcm->mmap_shadow = 1; - pcm->monotonic = 1; +#ifdef HAVE_CLOCK_GETTIME + pcm->monotonic = clock_gettime(CLOCK_MONOTONIC, ×pec) == 0; +#else + pcm->monotonic = 0; +#endif snd_pcm_link_hw_ptr(pcm, slave); snd_pcm_link_appl_ptr(pcm, slave); *pcmp = pcm; diff --git a/src/pcm/pcm_hw.c b/src/pcm/pcm_hw.c index e5de7682..8495f71b 100644 --- a/src/pcm/pcm_hw.c +++ b/src/pcm/pcm_hw.c @@ -996,13 +996,16 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp, const char *name, #ifdef HAVE_CLOCK_GETTIME if (SNDRV_PROTOCOL_VERSION(2, 0, 9) <= ver) { - int on = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC; - if (ioctl(fd, SNDRV_PCM_IOCTL_TTSTAMP, &on) < 0) { - ret = -errno; - SNDMSG("TTSTAMP failed\n"); - return ret; + struct timespec timespec; + if (clock_gettime(CLOCK_MONOTONIC, ×pec) == 0) { + int on = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC; + if (ioctl(fd, SNDRV_PCM_IOCTL_TTSTAMP, &on) < 0) { + ret = -errno; + SNDMSG("TTSTAMP failed\n"); + return ret; + } + monotonic = 1; } - monotonic = 1; } #endif else if (SNDRV_PROTOCOL_VERSION(2, 0, 5) <= ver) {