OSF DCE Application Development Guide--Core Components
OSF DCE Application Development Guide—Core Components
The stub detects outstanding context when it marshals context handle parameters.
Outstanding context is considered to exist from the point at which a non-NULL pointer
value is returned, until a NULL pointer value is returned. When outstanding context
exists, the server stub code will call a context rundown routine in response to certain
exceptions that indicate a loss of contact with the client. You should note that the exact
timing of the call depends on the transport. In particular, with the connectionless
protocol, servers that maintain context for clients expect clients to indicate periodically
that they are still running. If the server fails to hear from the client during a specified
timeout period, the server will assume that the client has stopped and call the context
rundown routine. This can mean a substantial delay between the time the client actually
fails and the time at which context maintained for the client is actually cleaned up. If the
context being held represents a scarce resource on the server, one consequence of the
delayed rundown may be that failed calls continue to hold the scarce resource for some
time before it is made available again.
Since a context handle may be freely shared among threads of the calling client context,
it is possible for outstanding context to exist for more than one call simultaneously.
Such shared context is considered to be outstanding as long as it is outstanding for any of
the participating threads. Also, any communications failures are likely to be detected at
different times for each such call thread, and the difference in timing may be especially
noticeable in the case of the connectionless protocol. Context rundown occurs only after
all server call threads have been terminated. This means that call operations in progress
on the server need not be concerned that the context they are operating on will be
changed unexpectedly. Imagine a situation in which context handles represent open file
descriptors, and the rundown routine closes the files. A manager thread that shares these
descriptors via a context handle is guaranteed that the files will remain open even if a
communications failure is detected in another thread that also is using the same context
handle.
/******
*
* store_handle_t_rundown -- Closes the opened storelet.
*
******/
/************************************************************/
void
store_handle_t_rundown(
store_handle_t store_h
)
{
error_status_t st;
printf("Store Manager: Running down context.0);
store_close(&store_h, &st);
}
16 − 22 Tandem Computers Incorporated 124245