On Mon, 20 Dec 2004 12:55:59 +0100, Oliver Neukum <[EMAIL PROTECTED]> wrote:
> Am Montag, 20. Dezember 2004 08:04 schrieb Pete Zaitcev:
> > +ÂÂÂÂÂÂÂadd_wait_queue(&rp->wait, &waita);
> > +ÂÂÂÂÂÂÂwhile ((ep = mon_text_fetch(rp, mbus)) == NULL) {
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂif (file->f_flags & O_NONBLOCK) {
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂremove_wait_queue(&rp->wait,
> > &waita);
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂreturn
> > -EWOULDBLOCK;ÂÂÂÂ/* Same as EAGAIN in Linux */
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ}
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ/*
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ * We do not count nwaiters, because
> > ->release is supposed
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ * to be called when all openers are gone
> > only.
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ */
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂset_current_state(TASK_INTERRUPTIBLE);
>
> Here you can lose a wakeup.
>
> > +ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂschedule();
Thanks, Oliver. Indeed, it's a bug.
-- Pete