Re: timing out on a semaphore

Andrew Morton (andrewm@uow.edu.au)
Sun, 25 Feb 2001 23:10:39 +0000


Tim Waugh wrote:
>
> I'm trying to chase down a semaphore time-out problem. I want to
> sleep on a semaphore until either
>
> (a) it's signalled, or
> (b) some amount of time has elapsed.
>
> What I'm doing is calling add_timer, and then down_interruptible, and
> finally del_timer. The timer's function ups the semaphore.
>
> The code is in parport_wait_event, in drivers/parport/ieee1284.c.
>
> Can anyone see anything obviously wrong with it? It seems to
> sometimes get stuck.

I think there might be a bogon in __down_interruptible's
handling of the semaphore state in this case. I remember
spotting something a few months back but I can't immediately
remember what it was :(

I'd suggest you slot a

sema_init(&port->physport->ieee1284.irq, 1);

into parport_wait_event() prior to adding the timer. If that
fixes it I'll go back through my patchpile, see if I can
resurrect that grey cell.

-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/