Hi,

Many times i have come across a code which uses prepare_to_wait() as follows
:

>>>
up(&semaphore);
---
---
---
prepare_to_wait(queue, &wait, TASK_INTERRUPTIBLE);
if(condition())
    schedule();
finish_wait(queue, &wait);
---
---
---
down_interruptible(&semaphore);
<<<

Now this is what i am interpreting :

 1. The above code can get preempted just after the call to
prepare_to_wait(), In that case it would not be run again by the scheduler
since it
 is in the TASK_INTERRUPTIBLE state. After that when someone wake's it up,
then the check is made (if condition) and then the normal flow of code.

 2. If the code does not get preempted after the call to prepare_to_wait(),
it will still execute the if condition while in TASK_INTERRUPTIBLE state -->
but a  TASK_INTERRUPTIBLE state is not runnable - i feel this is valid after
the call to schedule() is made. (i.e. it would not run again after it has
given up the CPU)

Am i right in the above two interpretations ?

_V

Reply via email to