From d5c5714c6aba35a4f3c4bb5113da043cd7831fe7 Mon Sep 17 00:00:00 2001
From: a <a@tuxpa.in>
Date: Sat, 28 Oct 2023 02:57:35 -0500
Subject: [PATCH] fuck me

---
 contrib/codecs/http/client.go | 5 +++--
 contrib/codecs/http/codec.go  | 3 +++
 pkg/server/responsewriter.go  | 6 +++++-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/contrib/codecs/http/client.go b/contrib/codecs/http/client.go
index 2f01aa9..a707be4 100644
--- a/contrib/codecs/http/client.go
+++ b/contrib/codecs/http/client.go
@@ -59,7 +59,9 @@ func Dial(ctx context.Context, client *http.Client, target string) (*Client, err
 	if client == nil {
 		client = http.DefaultClient
 	}
-	return &Client{remote: target, c: client, headers: http.Header{}}, nil
+	return &Client{remote: target, c: client, headers: http.Header{
+		"Content-Type": []string{"application/json"},
+	}}, nil
 }
 
 func (c *Client) SetHeader(key string, value string) {
@@ -196,6 +198,5 @@ func (c *Client) postBuf(ctx context.Context, rd io.Reader) (*http.Response, err
 			}
 		}
 	}()
-	hreq.Header.Add("Content-Type", "application/json")
 	return c.c.Do(hreq)
 }
diff --git a/contrib/codecs/http/codec.go b/contrib/codecs/http/codec.go
index caa126e..3a8e680 100644
--- a/contrib/codecs/http/codec.go
+++ b/contrib/codecs/http/codec.go
@@ -11,6 +11,7 @@ import (
 	"net/http"
 	"net/url"
 	"strings"
+	"sync"
 
 	"gfx.cafe/open/jrpc/pkg/codec"
 	"gfx.cafe/open/jrpc/pkg/serverutil"
@@ -29,6 +30,8 @@ type Codec struct {
 	msgs  chan *serverutil.Bundle
 	errCh chan httpError
 
+	mu sync.Mutex
+
 	i codec.PeerInfo
 }
 
diff --git a/pkg/server/responsewriter.go b/pkg/server/responsewriter.go
index e23a03e..404e585 100644
--- a/pkg/server/responsewriter.go
+++ b/pkg/server/responsewriter.go
@@ -65,6 +65,11 @@ func (c *callRespWriter) Send(v any, e error) (err error) {
 	if err != nil {
 		return err
 	}
+	select {
+	case <-c.ctx.Done():
+		return c.ctx.Err()
+	default:
+	}
 	defer c.cr.mu.Release(1)
 	if c.err != nil {
 		e = c.err
@@ -77,7 +82,6 @@ func (c *callRespWriter) Send(v any, e error) (err error) {
 	if v != nil {
 		ce.v = &v
 	}
-
 	err = c.cr.send(c.ctx, ce)
 	if err != nil {
 		return err
-- 
GitLab