Re: sleep for ever ?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello, there.

Bo Yang wrote:
> Hi ,
>     Take a look at following code :
> 
> DECLARE_WAITQUEUE(wait, current);
> 
> add_wait_queue(q, &wait);
> while (!condition) {
>         /* if there is an interrupt here , and the interrupt
>            is just the one the sleeping process wait
>            for , is this process sleep for the interrupt
>            for ever ?*/
>         set_current_state(TASK_INTERRUPTIBLE);
>         if (signal_pending(current))
>                 /* handle signal */
>         schedule();
> }
> set_current_state(TASK_RUNNING);
> remove_wait_queue(q, &wait);
> 
> Suppose the process just want to sleep for an hardware
> event , but before the set_current_state() call , the event
> come , is the process sleep for ever ?

I guess you already know it but please try not to post the same message
multiple times.

And, yes, you're responsible to set task state *before* testing for the
sleeping condition and sleep.  In the above code, you can lose the wake
up event and thus sleep indefinitely.

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

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux