Diff for /libaitrpc/src/srv.c between versions 1.9.2.28 and 1.9.2.29

version 1.9.2.28, 2012/05/17 16:47:35 version 1.9.2.29, 2012/05/18 15:24:33
Line 89  txPacket(sched_task_t *task) Line 89  txPacket(sched_task_t *task)
                         rpc->call_rep.ret = RPC_ERROR(-1);                          rpc->call_rep.ret = RPC_ERROR(-1);
                         rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                          rpc->call_rep.eno = RPC_ERROR(rpc_Errno);
                 } else {                  } else {
                        rpc->call_argc = htons(io_arraySize(f->func_vars));                        rpc->call_argc = htons(io_arraySize(RPC_RETVARS(c)));
                         /* Go Encapsulate variables */                          /* Go Encapsulate variables */
                        ret = io_vars2buffer(buf + wlen, sizeof buf - wlen, f->func_vars);                        ret = io_vars2buffer(buf + wlen, sizeof buf - wlen, RPC_RETVARS(c));
                         /* Free return values */                          /* Free return values */
                        io_clrVars(f->func_vars);                        io_freeVars(&c->cli_vars);
                         if (ret == -1) {                          if (ret == -1) {
                                 rpc_SetErr(EBADRPC, "Prepare RPC packet failed");                                  rpc_SetErr(EBADRPC, "Prepare RPC packet failed");
                                 rpc->call_argc ^= rpc->call_argc;                                  rpc->call_argc ^= rpc->call_argc;
Line 153  execCall(sched_task_t *task) Line 153  execCall(sched_task_t *task)
                 rpc->call_rep.eno = RPC_ERROR(rpc_Errno);                  rpc->call_rep.eno = RPC_ERROR(rpc_Errno);
         } else {          } else {
                 /* if client doesn't want reply */                  /* if client doesn't want reply */
                argc = rpc->call_req.flags & RPC_NOREPLY;                argc = RPC_CHK_NOREPLY(rpc);
                rpc->call_rep.ret = RPC_ERROR(rpc_srv_execCall(f, rpc, arr));                rpc->call_rep.ret = RPC_ERROR(rpc_srv_execCall(c, rpc, f->func_name, arr));
                 if (rpc->call_rep.ret == htonl(-1)) {                  if (rpc->call_rep.ret == htonl(-1)) {
                         rpc->call_rep.eno = RPC_ERROR(errno);                          rpc->call_rep.eno = RPC_ERROR(errno);
                         rpc->call_argc ^= rpc->call_argc;                          rpc->call_argc ^= rpc->call_argc;
Line 162  execCall(sched_task_t *task) Line 162  execCall(sched_task_t *task)
                         rpc->call_rep.eno ^= rpc->call_rep.eno;                          rpc->call_rep.eno ^= rpc->call_rep.eno;
                         if (argc) {                          if (argc) {
                                 /* without reply */                                  /* without reply */
                                io_clrVars(f->func_vars);                                io_freeVars(&c->cli_vars);
                                 rpc->call_argc ^= rpc->call_argc;                                  rpc->call_argc ^= rpc->call_argc;
                         } else {                          } else {
                                 /* reply */                                  /* reply */
                                rpc->call_argc = htons(io_arraySize(f->func_vars));                                rpc->call_argc = htons(io_arraySize(RPC_RETVARS(c)));
                         }                          }
                 }                  }
         }          }
Line 229  rxPacket(sched_task_t *task) Line 229  rxPacket(sched_task_t *task)
                         continue;                          continue;
                 }                  }
   
                noreply = rpc->call_req.flags & RPC_NOREPLY;                noreply = RPC_CHK_NOREPLY(rpc);
   
                 /* check RPC packet session info */                  /* check RPC packet session info */
                 if (rpc_chkPktSession(&rpc->call_session, &s->srv_session)) {                  if (rpc_chkPktSession(&rpc->call_session, &s->srv_session)) {
Line 853  rpc_srv_loopServer(rpc_srv_t * __restrict srv) Line 853  rpc_srv_loopServer(rpc_srv_t * __restrict srv)
                         close(c->cli_sock);                          close(c->cli_sock);
   
                         schedCancelby(srv->srv_root, taskMAX, CRITERIA_ARG, c, NULL);                          schedCancelby(srv->srv_root, taskMAX, CRITERIA_ARG, c, NULL);
                           io_freeVars(&RPC_RETVARS(c));
                         AIT_FREE_VAL(&c->cli_buf);                          AIT_FREE_VAL(&c->cli_buf);
                 }                  }
                 io_arrayDel(srv->srv_clients, i, 42);                  io_arrayDel(srv->srv_clients, i, 42);
Line 865  rpc_srv_loopServer(rpc_srv_t * __restrict srv) Line 866  rpc_srv_loopServer(rpc_srv_t * __restrict srv)
         TAILQ_FOREACH_SAFE(f, &srv->srv_funcs, func_node, tmp) {          TAILQ_FOREACH_SAFE(f, &srv->srv_funcs, func_node, tmp) {
                 TAILQ_REMOVE(&srv->srv_funcs, f, func_node);                  TAILQ_REMOVE(&srv->srv_funcs, f, func_node);
   
                 io_freeVars(&f->func_vars);  
                 AIT_FREE_VAL(&f->func_name);                  AIT_FREE_VAL(&f->func_name);
                 free(f);                  free(f);
         }          }
Line 878  rpc_srv_loopServer(rpc_srv_t * __restrict srv) Line 878  rpc_srv_loopServer(rpc_srv_t * __restrict srv)
 /*  /*
  * rpc_srv_execCall() Execute registered call from RPC server   * rpc_srv_execCall() Execute registered call from RPC server
  *   *
 * @call = Register RPC call * @cli = RPC client
  * @rpc = IN RPC call structure   * @rpc = IN RPC call structure
    * @funcname = Execute RPC function
  * @args = IN RPC calling arguments from RPC client   * @args = IN RPC calling arguments from RPC client
  * return: -1 error, !=-1 ok   * return: -1 error, !=-1 ok
  */   */
 int  int
rpc_srv_execCall(rpc_func_t * __restrict call, struct tagRPCCall * __restrict rpc, rpc_srv_execCall(rpc_cli_t * __restrict cli, struct tagRPCCall * __restrict rpc, 
                array_t * __restrict args)                ait_val_t funcname, array_t * __restrict args)
 {  {
         rpc_callback_t func;          rpc_callback_t func;
   
        if (!call || !rpc || !call->func_parent || !AIT_ADDR(&call->func_name)) {        if (!cli || !rpc || !AIT_ADDR(&funcname)) {
                 rpc_SetErr(EINVAL, "Invalid parameter can`t exec function");                  rpc_SetErr(EINVAL, "Invalid parameter can`t exec function");
                 return -1;                  return -1;
         }          }
   
        func = AIT_GET_LIKE(&call->func_name, rpc_callback_t);        func = AIT_GET_LIKE(&funcname, rpc_callback_t);
        return func(call, rpc, args);        return func(cli, rpc, args);
 }  }

Removed from v.1.9.2.28  
changed lines
  Added in v.1.9.2.29


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