Am Samstag, 23. Oktober 2004 00:56 schrieb Nishanth Aravamudan:
> +while (timeout) {
> if (signal_pending(current)) {
> remove_wait_queue(&usblp->wait, &wait);
> return writecount ? writecount : -EINTR;
> }
> -set_current_state(TASK_INTERRUPTIBLE);
> -if (timeout && !usblp->wcomplete) {
> -timeout = schedule_timeout(timeout);
> -} else {
> -set_current_state(TASK_RUNNING);
> +if (usblp->wcomplete) {
> break;
> }
> +set_current_state(TASK_INTERRUPTIBLE);

You can miss a wake up here.

> +timeout = schedule_timeout(timeout);
> }

The order of checking wcomplete and setting the state must be reversed.

        Regards
                Oliver
NHY޵隊X'uLv-zLƧj.vRLjNv-)ۺȧzzYnZ*.醊.b*'gNgh''q^)brKh~)ݢfv-z+fjvz#jW(.שje)uޖX(~zwNrzj_]jm?X(~zwXb?)u

Reply via email to