--- alsa-lib-1.0.22.orig/src/pcm/pcm_shm.c 2009-12-16 16:18:51.000000000 +0100 +++ alsa-lib-1.0.22/src/pcm/pcm_shm.c 2010-04-04 10:53:44.000000000 +0200 @@ -482,15 +482,19 @@ static int snd_pcm_shm_drop(snd_pcm_t *p static int snd_pcm_shm_drain(snd_pcm_t *pcm) { + struct timespec ts; snd_pcm_shm_t *shm = pcm->private_data; volatile snd_pcm_shm_ctrl_t *ctrl = shm->ctrl; int err; + ts.tv_sec = 0; + ts.tv_nsec = 10000000; + do { ctrl->cmd = SNDRV_PCM_IOCTL_DRAIN; err = snd_pcm_shm_action(pcm); if (err != -EAGAIN) break; - usleep(10000); + nanosleep(&ts, NULL); } while (1); if (err < 0) return err;