mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 09:23:48 +00:00
use different variants for server/client handlers
This commit is contained in:
parent
7ef9c891dc
commit
2502299233
3 changed files with 11 additions and 5 deletions
|
|
@ -125,7 +125,7 @@ func (c *Client) newClientConn(conn ServerCodec) *clientConn {
|
|||
}
|
||||
|
||||
func (cc *clientConn) close(err error, inflightReq *requestOp) {
|
||||
cc.handler.close(err, inflightReq)
|
||||
cc.handler.close(err, inflightReq, true)
|
||||
cc.codec.close()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -313,10 +313,16 @@ func (h *handler) handleNonBatchCall(cp *callProc, msg *jsonrpcMessage) {
|
|||
|
||||
// close cancels all requests except for inflightReq and waits for
|
||||
// call goroutines to shut down.
|
||||
func (h *handler) close(err error, inflightReq *requestOp) {
|
||||
// force = true must be user only for client-side handlers.
|
||||
func (h *handler) close(err error, inflightReq *requestOp, force bool) {
|
||||
h.cancelAllRequests(err, inflightReq)
|
||||
h.cancelRoot()
|
||||
h.callWG.Wait()
|
||||
if force {
|
||||
h.cancelRoot()
|
||||
h.callWG.Wait()
|
||||
} else {
|
||||
h.callWG.Wait()
|
||||
h.cancelRoot()
|
||||
}
|
||||
h.cancelServerSubscriptions(err)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ func (s *Server) serveSingleRequest(ctx context.Context, codec ServerCodec) {
|
|||
|
||||
h := newHandler(ctx, codec, s.idgen, &s.services, s.batchItemLimit, s.batchResponseLimit)
|
||||
h.allowSubscribe = false
|
||||
defer h.close(io.EOF, nil)
|
||||
defer h.close(io.EOF, nil, false)
|
||||
|
||||
reqs, batch, err := codec.readBatch()
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Reference in a new issue