From f0b49f2c8cde3f25aba89661f3981bf49b32c125 Mon Sep 17 00:00:00 2001 From: a <a@a.a> Date: Sun, 2 Oct 2022 01:44:57 -0500 Subject: [PATCH] latest batch of fixes --- client.go | 2 -- service.go | 25 +++++++++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/client.go b/client.go index 08c9f58..e406bed 100644 --- a/client.go +++ b/client.go @@ -506,12 +506,10 @@ func (c *Client) dispatch(codec ServerCodec) { // Spawn the initial read loop. go c.read(codec) - for { select { case <-c.close: return - // Read path: case op := <-c.readOp: if op.batch { diff --git a/service.go b/service.go index c75f313..d062149 100644 --- a/service.go +++ b/service.go @@ -19,6 +19,7 @@ package jrpc import ( "context" "reflect" + "runtime" "unicode" ) @@ -93,18 +94,18 @@ func (e *callback) ServeRPC(w ResponseWriter, r *Request) { fullargs = append(fullargs, reflect.ValueOf(r.ctx)) } fullargs = append(fullargs, args...) - // Catch panic while running the callback. - //defer func() { - // if err := recover(); err != nil { - // const size = 64 << 10 - // buf := make([]byte, size) - // buf = buf[:runtime.Stack(buf, false)] - // log.Error().Str("method", r.msg.Method).Interface("err", err).Hex("buf", buf).Msg("crashed") - // // errRes := errors.New("method handler crashed: " + fmt.Sprint(err)) - // w.Send(nil, nil) - // return - // } - //}() + //Catch panic while running the callback. + defer func() { + if err := recover(); err != nil { + const size = 64 << 10 + buf := make([]byte, size) + buf = buf[:runtime.Stack(buf, false)] + //log.Error().Str("method", r.msg.Method).Interface("err", err).Hex("buf", buf).Msg("crashed") + // errRes := errors.New("method handler crashed: " + fmt.Sprint(err)) + w.Send(nil, nil) + return + } + }() // Run the callback. results := e.fn.Call(fullargs) if e.errPos >= 0 && !results[e.errPos].IsNil() { -- GitLab