From 3076be593e38435b3deabef8c338add9898fbfc0 Mon Sep 17 00:00:00 2001 From: Sergey Stepanov Date: Thu, 9 Feb 2023 14:37:41 +0300 Subject: [PATCH] Fix possibility of lost IDs for WS requests/responses --- pkg/com/net.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/com/net.go b/pkg/com/net.go index 5fee5938..c3f0e305 100644 --- a/pkg/com/net.go +++ b/pkg/com/net.go @@ -96,7 +96,8 @@ func (c *Client) Close() { func (c *Client) Call(type_ api.PT, payload any) ([]byte, error) { // !to expose channel instead of results rq := outPool.Get().(*Out) - rq.Id, rq.T, rq.Payload = network.NewUid(), type_, payload + id := network.NewUid() + rq.Id, rq.T, rq.Payload = id, type_, payload r, err := json.Marshal(rq) outPool.Put(rq) if err != nil { @@ -106,7 +107,7 @@ func (c *Client) Call(type_ api.PT, payload any) ([]byte, error) { task := &call{done: make(chan struct{})} c.mu.Lock() - c.queue[rq.Id] = task + c.queue[id] = task c.conn.Write(r) c.mu.Unlock() select {