If communication breaks down while the server is maintaining context on behalf of the client, a cleanup routine may be needed to reset the context information. This cleanup routine is called a "context rundown routine." When a connection breaks, the server runtime will call this routine on every context handle opened by the client.
The context rundown routine is required, and is implicitly declared and named, when you apply the context_handle attribute to a type definition. The server will not call the context rundown routine if the context_handle attribute was applied directly to a parameter.
The context rundown routine syntax is:
void __RPC_USER type-id_rundown (type-id);
Note that the type name determines the name of the context rundown routine.
In this example, the context rundown routine calls the RemoteClose procedure used in the example in Context Handles. This procedure closes the file handle, frees the memory associated with the file, and assigns NULL to the context handle. The NULL value tells the runtime that the context handle has been deleted so that the rundown routine will not be called when the connection is removed. Your context rundown routine could perform other tasks, such as logging an event when a connnection fails.
//file: cxhndp.c (fragment of file containing remote procedures)
//The rundown routine is associated with the context handle type.
void __RPC_USER PCONTEXT_HANDLE_TYPE_rundown(PCONTEXT_HANDLE_TYPE phContext)
{
printf("Client died with an open file, closing it..\n");
RemoteClose(&phContext);
assert(phContext == 0);
}
context_handle, Context Handles