diff --git a/contrib/codecs/http/handler.go b/contrib/codecs/http/handler.go index b5742441bd7b3a76d5da290505390f8c96d489ab..8ce711e7be3b5eb2aced347d1f0c6af069ce6578 100644 --- a/contrib/codecs/http/handler.go +++ b/contrib/codecs/http/handler.go @@ -1,12 +1,15 @@ package http import ( + "context" + "errors" "net/http" "sync" - "gfx.cafe/open/jrpc/pkg/server" "golang.org/x/net/http2" "golang.org/x/net/http2/h2c" + + "gfx.cafe/open/jrpc/pkg/server" ) func HttpHandler(s *server.Server) http.Handler { @@ -31,9 +34,9 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { c := NewCodec(w, r) w.Header().Set("content-type", contentType) err := s.Server.ServeCodec(r.Context(), c) - if err != nil { - // slog.Error("codec err", "err", err) + if err != nil && !errors.Is(err, context.Canceled) { + // slog.Error("codec err", "err", err) + http.Error(w, "Internal Error", http.StatusInternalServerError) } - http.Error(w, "Internal Error", http.StatusInternalServerError) <-c.Closed() } diff --git a/pkg/server/responsewriter.go b/pkg/server/responsewriter.go index 09a7dff2c23441032bf5b438420b1cc2e7fac5f1..4a9df24143d293e3329588b8388b70383e22c76c 100644 --- a/pkg/server/responsewriter.go +++ b/pkg/server/responsewriter.go @@ -48,7 +48,7 @@ func (c *streamingRespWriter) Send(v any, e error) (err error) { } // only set value if value is not nil if v != nil { - ce.v = &v + ce.v = v } err = c.cr.mu.Acquire(c.ctx, 1) if err != nil { diff --git a/pkg/server/server.go b/pkg/server/server.go index 2139d548d5955a1e0bc022bbf4a72fae4b170db7..047214703c2465385cfcaea39d257891bd1f0a8b 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -5,9 +5,10 @@ import ( "errors" "sync" - "gfx.cafe/open/jrpc/pkg/jsonrpc" "golang.org/x/sync/semaphore" + "gfx.cafe/open/jrpc/pkg/jsonrpc" + "gfx.cafe/util/go/bufpool" "github.com/go-faster/jx"