--- libaitrpc/src/srv.c 2012/05/11 13:35:22 1.8.2.7 +++ libaitrpc/src/srv.c 2012/05/14 08:36:58 1.8.2.8 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.8.2.7 2012/05/11 13:35:22 misho Exp $ +* $Id: srv.c,v 1.8.2.8 2012/05/14 08:36:58 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -166,10 +166,10 @@ rxPacket(sched_task_t *task) rlen = recv(TASK_FD(task), buf, TASK_DATLEN(task), 0); if (rlen == -1) { LOGERR; - s->srv_kill = s->srv_blob.state = kill; + c->cli_kill = kill; return NULL; } else if (!rlen) { /* receive EOF */ - s->srv_kill = s->srv_blob.state = kill; + c->cli_kill = kill; return NULL; } @@ -265,7 +265,7 @@ rpc_srv_dispatchCall(void *arg) schedRead(root, rxPacket, c, c->cli_sock, buf, s->srv_netbuf); - schedRun(root, (void*) &s->srv_kill); + schedRun(root, (void*) &c->cli_kill); schedEnd(&root); shutdown(c->cli_sock, SHUT_RDWR); @@ -325,10 +325,10 @@ rxBLOB(sched_task_t *task) rlen = recv(TASK_FD(task), buf, TASK_DATLEN(task), 0); if (rlen == -1) { LOGERR; - s->srv_blob.state = kill; + c->cli_kill = kill; return NULL; - } else if (!rlen || s->srv_kill == kill) { /* receive EOF */ - s->srv_blob.state = kill; + } else if (!rlen) { /* receive EOF */ + c->cli_kill = kill; return NULL; } @@ -448,7 +448,7 @@ rpc_srv_dispatchVars(void *arg) schedRead(root, rxBLOB, c, c->cli_sock, buf, sizeof(struct tagBLOBHdr)); - schedRun(root, (void*) &s->srv_blob.state); + schedRun(root, (void*) &c->cli_kill); schedEnd(&root); shutdown(c->cli_sock, SHUT_RDWR); @@ -673,6 +673,7 @@ rpc_srv_loopBLOB(rpc_srv_t * __restrict srv) c->cli_parent = srv; /* spawn dispatch thread for BLOB client */ + c->cli_kill = enable; if (pthread_create(&c->cli_tid, &attr, rpc_srv_dispatchVars, c)) { LOGERR; continue; @@ -895,9 +896,8 @@ rpc_srv_loopServer(rpc_srv_t * __restrict srv) if (listen(srv->srv_server.cli_sock, SOMAXCONN) == -1) { LOGERR; return -1; - } /*else + } else fcntl(srv->srv_server.cli_sock, F_SETFL, fcntl(srv->srv_server.cli_sock, F_GETFL) | O_NONBLOCK); - */ pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); @@ -934,6 +934,7 @@ rpc_srv_loopServer(rpc_srv_t * __restrict srv) c->cli_parent = srv; /* spawn rpc client dispatcher */ + c->cli_kill = enable; if (pthread_create(&c->cli_tid, &attr, rpc_srv_dispatchCall, c)) { LOGERR; continue;