diff --git a/contrib/codecs/rdwr/client.go b/contrib/codecs/rdwr/client.go
index a8303ae018cb81b5fd93bd6ebc95235ffdf452d6..d36b04ca05c5a218fec0a5a5f229a1d005a38ba2 100644
--- a/contrib/codecs/rdwr/client.go
+++ b/contrib/codecs/rdwr/client.go
@@ -110,11 +110,17 @@ func (c *Client) listen() error {
 
 func (c *Client) Do(ctx context.Context, result any, method string, params any) error {
 	id := c.p.NextId()
+	buf := jjson.GetBuf()
+	defer jjson.PutBuf(buf)
 	req, err := jsonrpc.NewRequest(ctx, jsonrpc.NewId(id), method, params)
 	if err != nil {
 		return err
 	}
-	err = jjson.MarshalAndEncode(c.wr, req)
+	err = json.NewEncoder(buf).Encode(req)
+	if err != nil {
+		return err
+	}
+	err = c.writeContext(req.Context(), buf.Bytes())
 	if err != nil {
 		return err
 	}