diff --git a/rpc/rpchandler.go b/rpc/rpchandler.go index ccf5fc7..00605a6 100644 --- a/rpc/rpchandler.go +++ b/rpc/rpchandler.go @@ -273,25 +273,7 @@ func (handler *RpcHandler) HandlerRpcRequest(request *RpcRequest) { } } - //复制输入参数 - iParamValue := reflect.New(v.inParamValue.Type().Elem()) - iParam := iParamValue.Interface() - _, processor := GetProcessorType(request.inParam) - bytes,err := processor.Marshal(request.inParam) - if err == nil { - err = processor.Unmarshal(bytes,iParam) - } - - if err != nil { - errM := "RpcHandler " + handler.rpcHandler.GetName() + "."+ request.RpcRequestData.GetServiceMethod()+" deep copy inParam is error:" + err.Error() - log.SError(errM) - if request.requestHandle != nil { - request.requestHandle(nil, RpcError(errM)) - } - return - } - - paramList = append(paramList, iParamValue) + paramList = append(paramList, reflect.ValueOf(request.inParam)) var oParam reflect.Value if v.outParamValue.IsValid() { if request.localReply != nil { @@ -306,7 +288,6 @@ func (handler *RpcHandler) HandlerRpcRequest(request *RpcRequest) { request.requestHandle(nil, RpcError(rErr)) return } - returnValues := v.method.Func.Call(paramList) errInter := returnValues[0].Interface() if errInter != nil { diff --git a/rpc/server.go b/rpc/server.go index a75ab94..b90c915 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -335,8 +335,23 @@ func (server *Server) selfNodeRpcHandlerAsyncGo(client *Client, callerRpcHandler } _, processor := GetProcessorType(args) + inParamValue := reflect.New(reflect.ValueOf(args).Type().Elem()) + //args + //复制输入参数 + iParam := inParamValue.Interface() + bytes,err := processor.Marshal(args) + if err == nil { + err = processor.Unmarshal(bytes,iParam) + } + + if err != nil { + errM := errors.New("RpcHandler " + handlerName + "."+serviceMethod+" deep copy inParam is error:" + err.Error()) + log.SError(errM.Error()) + return errM + } + req := MakeRpcRequest(processor, 0, 0, serviceMethod, noReply, nil) - req.inParam = args + req.inParam = iParam req.localReply = reply if noReply == false { @@ -370,7 +385,7 @@ func (server *Server) selfNodeRpcHandlerAsyncGo(client *Client, callerRpcHandler } } - err := rpcHandler.PushRpcRequest(req) + err = rpcHandler.PushRpcRequest(req) if err != nil { ReleaseRpcRequest(req) return err