优化临时内存池的回收

This commit is contained in:
boyce
2020-07-10 14:54:06 +08:00
parent c7a1d86039
commit 7e72782c16
3 changed files with 13 additions and 7 deletions

View File

@@ -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())

View File

@@ -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 {

View File

@@ -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)