Hi,
Semaphore is initialized in locking state using call "init_MTEX_LOCKED()", when resources are not available process calls down_interruptible() and blocks. Once resources are freed up() is called, and blocked process is unblocked. up() is called from interrupt context which frees resources on receiving ACK-Interrupt.
Following is the code snippet for blocking:
do {
ret = down_interruptible(sem)
ret = down_interruptible(sem)
if (ret == 0) {
break;
} else {
printk("Semaphore is not acquired try again\n");
continue;
}
}
} while (1);
While loop is used to make sure down_interrptible() is called until process acquires the semaphore. If process receives signal, process unblocks from down_interrptible() without acquiring the semaphore.
Issue am seeing is once signal is received under the blocking state, again trying to acquire semaphore using down_interruptible() return value is always non-zero and process is looping in while loop.
Can someone explain this behavior, I wrote the code with expectation that after signal is received again trying to acquire lock will either block the process or process will get semaphore.
Please help me on this.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies