check availability of CLOCK_MONOTONIC

Use monotonic timestamps only after checking that CLOCK_MONOTONIC is
actually supported by the C library.
This commit is contained in:
Clemens Ladisch 2008-01-14 08:51:45 +01:00
parent 07e1341548
commit 0e8a259914
2 changed files with 16 additions and 7 deletions

View file

@ -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, &timespec) == 0;
#else
pcm->monotonic = 0;
#endif
snd_pcm_link_hw_ptr(pcm, slave);
snd_pcm_link_appl_ptr(pcm, slave);
*pcmp = pcm;

View file

@ -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, &timespec) == 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) {