L4 IPC doubt

Tiago Jorge tjpj at lasige.di.fc.ul.pt
Mon May 2 17:13:53 CEST 2005

Ronald Aigner wrote:

>Tiago Jorge wrote on 05/02/05 15:37 this:
>>>I will try to describe the scenario as I understood it:
>>>There exist:
>>>- The Flips Server (F)
>>>- The Server (S) with one server thread
>>>- One or more Clients (C1, C2, ...).
>>>Now C1 calls S, which receives the message, decodes it, calls your 
>>>server function, makes a call to F and blocks, waiting for the reply 
>>>from F. The C2 tries to call the same server S.
>>>If this is correct, then yes, C2 and all following clients will block, 
>>>because the server-thread is blocked waiting for F.
>>the problem is that S blocks when doing the call to F with no reason. 
>>But when i removed the call from C1 to S (that is blocked waiting the 
>>IPC response from S), S did the F IPC with no problem... So it is S that 
>>is blocked when doing the ipc_send call to F, not waiting for the 
>>answer, because the request never arrives to the F server.
I like your description :)

>So, the non-blocking szenario is:
>- no client does send any message to S.
>- S (magically*) sends a message to F and receives a reply (**)
>* how is this request initiated if not by a client?
>** let us try to stay with the L4 speech:
>   - an "IPC send" is an IPC from thread T1 to T2 without an immediate reply
>   - an "IPC call" is an IPC from thread T1 to T2 and T1 atomically 
>waits for a reply from T2 (i.e. is blocked until T2 sends the reply).
>   - so, if you remove "the ipc_send call to F" what do you mean in L4 
The imaginary test cenario was the following... i've removed the client 
and i've emulated internally the call so i could test if the problem was 
from the comunication S<->F... so the only ipc here its between  S and F 
:). I've never removed the call from F. Only from C1. I must always have 

>And the blocking szenario is:
>- C1 calls S.
>- S calls F, but blocks in the send phase of the call.
>Did I get it right now? (The respective code snippets or IDL would be 
yep... thats the problem.

if i use the emulated szenario explained above, the ipc between S<->F 
works... if i put the client the S<->F does not work...:(
my doubt remains... why can't i do the second IPC? because i've debugged 
the client stubs and the server-side stubs and i've realized that S 
blocks in the ipc_send, the call never arrives on the server...


More information about the l4-hackers mailing list