--- libaitrpc/src/srv.c 2012/03/28 01:17:09 1.7.2.1 +++ libaitrpc/src/srv.c 2012/03/28 13:37:13 1.7.2.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.7.2.1 2012/03/28 01:17:09 misho Exp $ +* $Id: srv.c,v 1.7.2.2 2012/03/28 13:37:13 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -593,10 +593,9 @@ rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) ioTRACE(RPC_TRACE_LEVEL); - if (!srv) { - rpc_SetErr(EINVAL, "Can`t destroy server because parameter is null!"); + if (!srv || srv->srv_blob.state == disable) return; - } else + else srv->srv_blob.state = kill; rpc_srv_unregisterCall(srv, NULL, CALL_BLOBSHUTDOWN); @@ -628,6 +627,9 @@ rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) while (pthread_mutex_trylock(&srv->srv_blob.mtx) == EBUSY); pthread_mutex_destroy(&srv->srv_blob.mtx); + + /* at final, save disable BLOB service state */ + srv->srv_blob.state = disable; } /* @@ -845,6 +847,7 @@ rpc_srv_initServer(u_int regProgID, u_int regProcID, i rpc_srv_registerCall(srv, NULL, CALL_SRVCLIENTS, 1); rpc_srv_registerCall(srv, NULL, CALL_SRVSESSIONS, 4); rpc_srv_registerCall(srv, NULL, CALL_SRVCALLS, 1); + return srv; }