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