diff --git a/rpc/client.go b/rpc/client.go index e421c89..84bf68c 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -114,6 +114,7 @@ func (slf *Client) AsycGo(rpcHandler IRpcHandler,serviceMethod string,callback r InParam,herr := processor.Marshal(args) if herr != nil { + ReleaseCall(call) return herr } @@ -125,19 +126,25 @@ func (slf *Client) AsycGo(rpcHandler IRpcHandler,serviceMethod string,callback r bytes,err := processor.Marshal(request.RpcRequestData) processor.ReleaseRpcRequest(request.RpcRequestData) - if err != nil { + slf.RemovePending(call.Seq) + ReleaseCall(call) return err } + if slf.conn == nil { + slf.RemovePending(call.Seq) + ReleaseCall(call) return fmt.Errorf("Rpc server is disconnect,call %s is fail!",serviceMethod) } + err = slf.conn.WriteMsg(bytes) if err != nil { - call.Err = err + slf.RemovePending(call.Seq) + ReleaseCall(call) } - return call.Err + return err } func (slf *Client) Go(noReply bool,serviceMethod string, args interface{},reply interface{}) *Call { @@ -201,7 +208,6 @@ func (slf *Client) Run(){ continue } - v := slf.FindPending(respone.RpcResponeData.GetSeq()) if v == nil { log.Error("rpcClient cannot find seq %d in pending",respone.RpcResponeData.GetSeq()) diff --git a/rpc/rpchandler.go b/rpc/rpchandler.go index 0ffd63b..10a1406 100644 --- a/rpc/rpchandler.go +++ b/rpc/rpchandler.go @@ -203,8 +203,8 @@ func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) { } } }() - defer processor.ReleaseRpcRequest(request.RpcRequestData) defer ReleaseRpcRequest(request) + defer processor.ReleaseRpcRequest(request.RpcRequestData) v,ok := slf.mapfunctons[request.RpcRequestData.GetServiceMethod()] if ok == false { diff --git a/rpc/server.go b/rpc/server.go index 00cc320..57f1223 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -104,14 +104,14 @@ func (agent *RpcAgent) Run() { req.RpcRequestData = processor.MakeRpcRequest(0,"",false,nil) err = processor.Unmarshal(data,req.RpcRequestData) if err != nil { + log.Error("rpc Unmarshal request is error: %v", err) if req.RpcRequestData.GetSeq()>0 { - rpcError := RpcError("rpc Unmarshal request is error") + rpcError := RpcError(err.Error()) agent.WriteRespone(req.RpcRequestData.GetServiceMethod(),req.RpcRequestData.GetSeq(),nil,&rpcError) processor.ReleaseRpcRequest(req.RpcRequestData) ReleaseRpcRequest(req) continue }else{ - log.Error("rpc Unmarshal request is error: %v", err) //will close tcpconn processor.ReleaseRpcRequest(req.RpcRequestData) ReleaseRpcRequest(req)