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