On 09/18/2007 02:40 PM, Takashi Iwai wrote: > At Tue, 18 Sep 2007 13:54:23 +0200, > Rene Herman wrote: >> Hi. >> >> While looking through ALSA for schedule_timeout() calls, I ran into: >> >> int snd_mixart_send_msg(...) >> { >> >> [ ... ] >> >> set_current_state(TASK_UNINTERRUPTIBLE); >> add_wait_queue(&mgr->msg_sleep, &wait); >> spin_unlock_irq(&mgr->msg_lock); >> timeout = schedule_timeout(MSG_TIMEOUT_JIFFIES); >> remove_wait_queue(&mgr->msg_sleep, &wait); >> >> if (! timeout) { >> /* error - no ack */ >> mutex_unlock(&mgr->msg_mutex); >> snd_printk(KERN_ERR "error: no reponse on msg %x\n", >> msg_frame); >> return -EIO; >> } >> >> [ ... ] >> >> } >> >> and the same in snd_mixart_send_msg_wait_notif(). >> >> I believe there to be something wrong with this code. A schedule_timeout() >> in TASK_UNINTERRUPTIBLE is always going to return 0. > > No, it returns the time left at the point it's woken up. > *_uninterruptible() ignores signals but not wake_up() itself > (otherwise it makes no sense). The description in the kernel comment > is misleading indeed. And the wake_up() is done from interrupt here -- yes, okay, I understand now. Thanks. (send email to digigram asking what happened to that alsa@ address by the way). Rene. _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel