mirror of
https://github.com/duanhf2012/origin.git
synced 2026-03-14 04:37:33 +08:00
优化临时内存池的回收
This commit is contained in:
@@ -114,6 +114,7 @@ func (slf *Client) AsycGo(rpcHandler IRpcHandler,serviceMethod string,callback r
|
|||||||
|
|
||||||
InParam,herr := processor.Marshal(args)
|
InParam,herr := processor.Marshal(args)
|
||||||
if herr != nil {
|
if herr != nil {
|
||||||
|
ReleaseCall(call)
|
||||||
return herr
|
return herr
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,19 +126,25 @@ func (slf *Client) AsycGo(rpcHandler IRpcHandler,serviceMethod string,callback r
|
|||||||
|
|
||||||
bytes,err := processor.Marshal(request.RpcRequestData)
|
bytes,err := processor.Marshal(request.RpcRequestData)
|
||||||
processor.ReleaseRpcRequest(request.RpcRequestData)
|
processor.ReleaseRpcRequest(request.RpcRequestData)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
slf.RemovePending(call.Seq)
|
||||||
|
ReleaseCall(call)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if slf.conn == nil {
|
if slf.conn == nil {
|
||||||
|
slf.RemovePending(call.Seq)
|
||||||
|
ReleaseCall(call)
|
||||||
return fmt.Errorf("Rpc server is disconnect,call %s is fail!",serviceMethod)
|
return fmt.Errorf("Rpc server is disconnect,call %s is fail!",serviceMethod)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = slf.conn.WriteMsg(bytes)
|
err = slf.conn.WriteMsg(bytes)
|
||||||
if err != nil {
|
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 {
|
func (slf *Client) Go(noReply bool,serviceMethod string, args interface{},reply interface{}) *Call {
|
||||||
@@ -201,7 +208,6 @@ func (slf *Client) Run(){
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
v := slf.FindPending(respone.RpcResponeData.GetSeq())
|
v := slf.FindPending(respone.RpcResponeData.GetSeq())
|
||||||
if v == nil {
|
if v == nil {
|
||||||
log.Error("rpcClient cannot find seq %d in pending",respone.RpcResponeData.GetSeq())
|
log.Error("rpcClient cannot find seq %d in pending",respone.RpcResponeData.GetSeq())
|
||||||
|
|||||||
@@ -203,8 +203,8 @@ func (slf *RpcHandler) HandlerRpcRequest(request *RpcRequest) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
defer processor.ReleaseRpcRequest(request.RpcRequestData)
|
|
||||||
defer ReleaseRpcRequest(request)
|
defer ReleaseRpcRequest(request)
|
||||||
|
defer processor.ReleaseRpcRequest(request.RpcRequestData)
|
||||||
|
|
||||||
v,ok := slf.mapfunctons[request.RpcRequestData.GetServiceMethod()]
|
v,ok := slf.mapfunctons[request.RpcRequestData.GetServiceMethod()]
|
||||||
if ok == false {
|
if ok == false {
|
||||||
|
|||||||
@@ -104,14 +104,14 @@ func (agent *RpcAgent) Run() {
|
|||||||
req.RpcRequestData = processor.MakeRpcRequest(0,"",false,nil)
|
req.RpcRequestData = processor.MakeRpcRequest(0,"",false,nil)
|
||||||
err = processor.Unmarshal(data,req.RpcRequestData)
|
err = processor.Unmarshal(data,req.RpcRequestData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
log.Error("rpc Unmarshal request is error: %v", err)
|
||||||
if req.RpcRequestData.GetSeq()>0 {
|
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)
|
agent.WriteRespone(req.RpcRequestData.GetServiceMethod(),req.RpcRequestData.GetSeq(),nil,&rpcError)
|
||||||
processor.ReleaseRpcRequest(req.RpcRequestData)
|
processor.ReleaseRpcRequest(req.RpcRequestData)
|
||||||
ReleaseRpcRequest(req)
|
ReleaseRpcRequest(req)
|
||||||
continue
|
continue
|
||||||
}else{
|
}else{
|
||||||
log.Error("rpc Unmarshal request is error: %v", err)
|
|
||||||
//will close tcpconn
|
//will close tcpconn
|
||||||
processor.ReleaseRpcRequest(req.RpcRequestData)
|
processor.ReleaseRpcRequest(req.RpcRequestData)
|
||||||
ReleaseRpcRequest(req)
|
ReleaseRpcRequest(req)
|
||||||
|
|||||||
Reference in New Issue
Block a user