[omniORB] Canceling a blocking function

St. John, Adrian adrian@ipo.att.com
Mon, 3 Apr 2000 04:34:04 -0700


> server[i]-> do_function(argument) // blocked (no reply yet)
> 
> How can we unblock this? We don't want to wait  more than 
> 10sec for these
> functions to timeout because since the overall function is 
> deemed completed,
> there will be another request soon and this would cause a 
> very large number
> threads to exist in the system at any given point. We dont 
> want to lower the
> timeout to anything to less than 10sec because this would 
> cause an early
> abort in some cases.

One (messy, but standard) way of doing this is with the DII, using
a non-blocking invocation, and poll for results after sleeping in
each thread for 10 seconds.

I don't know enough about OmniORB to comment on how to do this any
other way, but from my experiance of using other products, there
is normally a way to 'hack' the output of the IDL compiler to do
something similar (perform a non-blocking write-method operation,
sleep a while, and check for a response).

Adrian St. John
AT&T Labs, Redditch.