--- libaitrpc/src/srv.c 2011/09/03 12:39:27 1.4.2.8 +++ libaitrpc/src/srv.c 2011/09/07 00:47:14 1.4.2.12 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.4.2.8 2011/09/03 12:39:27 misho Exp $ +* $Id: srv.c,v 1.4.2.12 2011/09/07 00:47:14 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -117,7 +117,8 @@ rpc_srv_dispatchCall(void *arg) ret = -5; goto makeReply; } - } + } else + arr = NULL; /* execute call */ argc = 0; @@ -437,12 +438,10 @@ rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) } else srv->srv_blob.state = kill; - /* rpc_srv_unregisterCall(srv, NULL, CALL_BLOBSHUTDOWN); rpc_srv_unregisterCall(srv, NULL, CALL_BLOBCLIENTS); rpc_srv_unregisterCall(srv, NULL, CALL_BLOBVARS); rpc_srv_unregisterCall(srv, NULL, CALL_BLOBSTATE); - */ /* close all clients connections & server socket */ for (i = 0, c = srv->srv_blob.clients; i < srv->srv_numcli && c; i++, c++) @@ -450,13 +449,13 @@ rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) shutdown(c->cli_sock, SHUT_RDWR); close(srv->srv_blob.server.cli_sock); + pthread_mutex_lock(&srv->srv_blob.mtx); if (srv->srv_blob.clients) { free(srv->srv_blob.clients); srv->srv_blob.clients = NULL; } /* detach blobs */ - pthread_mutex_lock(&srv->srv_blob.mtx); while ((f = srv->srv_blob.blobs)) { srv->srv_blob.blobs = f->blob_next; rpc_srv_blobFree(srv, f); @@ -498,9 +497,10 @@ rpc_srv_loopBLOB(rpc_srv_t * __restrict srv) if (!c->cli_sa.sa_family) break; if (i >= srv->srv_numcli) { - usleep(1000000); #ifdef HAVE_PTHREAD_YIELD pthread_yield(); +#else + usleep(1000000); #endif continue; } @@ -530,7 +530,7 @@ rpc_srv_loopBLOB(rpc_srv_t * __restrict srv) pthread_detach(c->cli_tid); } - srv->srv_blob.state = disable; + srv->srv_blob.state = kill; return 0; } @@ -761,9 +761,10 @@ rpc_srv_loopServer(rpc_srv_t * __restrict srv) if (!c->cli_sa.sa_family) break; if (i >= srv->srv_numcli) { - usleep(1000000); #ifdef HAVE_PTHREAD_YIELD pthread_yield(); +#else + usleep(1000000); #endif continue; }