Kiszolgálói környezet lefuttatási rutinja
Ha a kommunikáció megszakad, miközben a kiszolgáló az ügyfél nevében fenntartja a környezetet, szükség lehet egy karbantartási rutinra a kiszolgáló által az adott ügyfél nevében fenntartott állapot törléséhez. Ezt a tisztítási rutint környezeti lefutási rutinnak nevezik. Ha megszakad a kapcsolat, a kiszolgálói csonk és a futásidejű kódtár ezt a rutint hívja meg az ügyfél által megnyitott minden környezeti leírón.
A környezet lefuttatási rutinja kötelező, és implicit módon deklarálva és elnevezve történik, amikor a [context_handle] attribútumot egy típusdefinícióra alkalmazza. A kiszolgáló nem hívja meg a környezeti lefuttatási rutint, ha a [context_handle] attribútumot közvetlenül egy paraméterre alkalmazták.
A környezeti lefuttatási rutin szintaxisa a következő:
void __RPC_USER type-id_rundown (type-id);
Vegye figyelembe, hogy a típusnév határozza meg a környezeti lefuttatási rutin nevét.
Az alábbi kódtöredék egy mintakörnyezeti lefuttatási rutint mutat be. amely meghívja a példában használt RemoteClose eljárást Felületfejlesztés környezetfogópontok használatával, kiszolgálófejlesztés környezetleírók, és ügyfélfejlesztés környezetleírók használatával. Ez az eljárás bezárja a fájlleírót, felszabadítja a fájlhoz társított memóriát, és NULL rendel a környezeti leíróhoz. A NULL hozzárendelése a RemoteClose függvény meghívásának eredménye, és lefuttatási forgatókönyvben nem szükséges. Az RPC futási ideje megtisztítja az állapotát, függetlenül attól, hogy a környezet leírója a NULL van-e beállítva.
//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);
}