--- libaitrpc/src/srv.c 2010/06/24 15:23:38 1.1.1.1.2.12 +++ libaitrpc/src/srv.c 2010/07/08 07:16:36 1.1.1.1.2.16 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.1.1.1.2.12 2010/06/24 15:23:38 misho Exp $ +* $Id: srv.c,v 1.1.1.1.2.16 2010/07/08 07:16:36 misho Exp $ * *************************************************************************/ #include "global.h" @@ -93,10 +93,11 @@ rpc_srv_dispatchCall(void *arg) ret = -6; } else if ((ret = rpc_srv_execCall(f, rpc, v)) == -1) - ret = -6; + ret = -9; else argc = rpc_srv_getValsCall(f, &vals); + printf("finish func %d\n", argc); makeReply: memcpy(&rrpc.ret_session, &rpc->call_session, sizeof rrpc.ret_session); rrpc.ret_tag = rpc->call_tag; @@ -237,6 +238,7 @@ rpc_srv_dispatchVars(void *arg) ret = -6; break; } + printf("++++++ %p\n", b); if (rpc_srv_blobMap(s, b) != -1) { ret = rpc_srv_sendBLOB(c, b); @@ -264,6 +266,7 @@ rpc_srv_dispatchVars(void *arg) blob->hdr_cmd); ret = -7; } + cx++; makeReply: // Replay to client! @@ -280,6 +283,8 @@ makeReply: ret = -9; break; } + cx = -1; + } while (ret > -1); shutdown(c->cli_sock, SHUT_RDWR); @@ -364,6 +369,7 @@ rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s rpc_srv_registerCall(srv, NULL, CALL_BLOBSHUTDOWN, 0); rpc_srv_registerCall(srv, NULL, CALL_BLOBCLIENTS, 0); rpc_srv_registerCall(srv, NULL, CALL_BLOBVARS, 0); + rpc_srv_registerCall(srv, NULL, CALL_BLOBSTATE, 1); pthread_mutex_unlock(&srv->srv_mtx); srv->srv_blob.state = enable; // enable BLOB @@ -391,18 +397,22 @@ rpc_srv_endBLOBServer(rpc_srv_t * __restrict srv) 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); for (i = 0, c = srv->srv_blob.clients; i < srv->srv_numcli && c; i++, c++) if (c->cli_sa.sa_family) shutdown(c->cli_sock, SHUT_RDWR); close(srv->srv_blob.server.cli_sock); - if (srv->srv_blob.clients) + if (srv->srv_blob.clients) { free(srv->srv_blob.clients); + srv->srv_blob.clients = NULL; + } 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); free(f); } pthread_mutex_unlock(&srv->srv_blob.mtx); @@ -439,7 +449,7 @@ rpc_srv_execBLOBServer(rpc_srv_t * __restrict srv) for (c = srv->srv_blob.clients, i = 0; i < srv->srv_numcli && c; i++, c++) if (!c->cli_sa.sa_family) break; - if (c && c->cli_sa.sa_family && c->cli_parent) { + if (i >= srv->srv_numcli) { usleep(1000000); continue; } @@ -610,6 +620,7 @@ rpc_srv_endServer(rpc_srv_t * __restrict srv) if (srv->srv_clients) { free(srv->srv_clients); + srv->srv_clients = NULL; srv->srv_numcli = 0; } @@ -655,7 +666,7 @@ rpc_srv_execServer(rpc_srv_t * __restrict srv) for (c = srv->srv_clients, i = 0; i < srv->srv_numcli && c; i++, c++) if (!c->cli_sa.sa_family) break; - if (c && c->cli_sa.sa_family && c->cli_parent) { + if (i >= srv->srv_numcli) { usleep(1000000); continue; }