Diff for /libaitrpc/src/srv.c between versions 1.30.2.4 and 1.30.2.7

version 1.30.2.4, 2024/02/26 11:01:01 version 1.30.2.7, 2024/02/26 16:56:22
Line 291  execCall(sched_task_t *task) Line 291  execCall(sched_task_t *task)
                         if (TASK_VAL(task)) {                          if (TASK_VAL(task)) {
                                 /* without reply */                                  /* without reply */
                                 ait_freeVars(&c->cli_vars);                                  ait_freeVars(&c->cli_vars);
                        } else {                        } else if (rpc->call_io & RPC_REQ) {
                                 /* reply */                                  /* reply */
                                 rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));                                  rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));
                         }                          }
Line 302  execCall(sched_task_t *task) Line 302  execCall(sched_task_t *task)
         taskExit(task, NULL);          taskExit(task, NULL);
 }  }
   
   int
   rpc_srv_Return(sched_root_task_t *root, rpc_cli_t *c)
   {
           rpc_srv_t *s = c->cli_parent;
           u_char *buf = AIT_GET_BUF(&c->cli_buf);
           struct tagRPCCall *rpc = (struct tagRPCCall*) buf;
   
           if (!RPC_CHK_NOREPLY(rpc)) {
                   rpc->call_argc = (u_char) array_Size(RPC_RETVARS(c));
                   schedWrite(root, cbProto[s->srv_proto][CB_TXPACKET], c, c->cli_sock, NULL, 0);
           }
   
           return rpc->call_argc;
   }
   
 static void *  static void *
 rxPacket(sched_task_t *task)  rxPacket(sched_task_t *task)
 {  {
Line 323  rxPacket(sched_task_t *task) Line 338  rxPacket(sched_task_t *task)
   
         /* prepare rx */          /* prepare rx */
         len = recv(TASK_FD(task), &b, sizeof b, MSG_PEEK);          len = recv(TASK_FD(task), &b, sizeof b, MSG_PEEK);
        if (len == sizeof b)        if (len < 1) {
                 /* close connection */
                 schedEvent(TASK_ROOT(task), cbProto[s->srv_proto][CB_CLOSECLIENT], 
                                 TASK_ARG(task), 0, NULL, 0);
                 taskExit(task, NULL);
         } else if (len == sizeof b)
                 rlen = ntohl(b.call_len);                  rlen = ntohl(b.call_len);
           else
                   goto end;
   
         rlen = recv(TASK_FD(task), buf, rlen, 0);          rlen = recv(TASK_FD(task), buf, rlen, 0);
         if (rlen == -1) {          if (rlen == -1) {
Line 390  err: Line 412  err:
         if (!noreply && (rpc->call_io & RPC_REQ))          if (!noreply && (rpc->call_io & RPC_REQ))
                 schedWrite(TASK_ROOT(task), cbProto[s->srv_proto][CB_TXPACKET],                   schedWrite(TASK_ROOT(task), cbProto[s->srv_proto][CB_TXPACKET], 
                                 TASK_ARG(task), TASK_FD(task), rpc, len);                                  TASK_ARG(task), TASK_FD(task), rpc, len);
end:
         /* lets get next packet */          /* lets get next packet */
         schedReadSelf(task);          schedReadSelf(task);
         taskExit(task, NULL);          taskExit(task, NULL);
Line 1383  rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s Line 1405  rpc_srv_initBLOBServer(rpc_srv_t * __restrict srv, u_s
                 close(srv->srv_blob.server.cli_sock);                  close(srv->srv_blob.server.cli_sock);
                 AIT_FREE_VAL(&srv->srv_blob.dir);                  AIT_FREE_VAL(&srv->srv_blob.dir);
                 return -1;                  return -1;
        } else        }
                schedSignalDispatch(srv->srv_blob.root, 42); 
   
         return 0;          return 0;
 }  }
Line 1459  rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv) Line 1480  rpc_srv_loopBLOBServer(rpc_srv_t * __restrict srv)
         schedPolling(srv->srv_blob.root, &ts, NULL);          schedPolling(srv->srv_blob.root, &ts, NULL);
         /* main rpc loop */          /* main rpc loop */
         schedRun(srv->srv_blob.root, &srv->srv_blob.kill);          schedRun(srv->srv_blob.root, &srv->srv_blob.kill);
         schedSignalDispatch(srv->srv_blob.root, 0);  
   
         /* detach blobs */          /* detach blobs */
         TAILQ_FOREACH_SAFE(b, &srv->srv_blob.blobs, blob_node, tmp) {          TAILQ_FOREACH_SAFE(b, &srv->srv_blob.blobs, blob_node, tmp) {

Removed from v.1.30.2.4  
changed lines
  Added in v.1.30.2.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>