in conn.go [160:185]
func (c *Conn) rpc(opcode int32, w jute.RecordWriter, r jute.RecordReader) error {
header := &proto.RequestHeader{
Xid: c.nextXid(),
Type: opcode,
}
pending := &pendingRequest{
reply: r,
done: make(chan struct{}, 1),
}
c.reqs.Store(header.Xid, pending)
if err := WriteRecords(c.conn, header, w); err != nil {
return fmt.Errorf("could not write rpc request: %w", err)
}
select {
case <-pending.done:
return pending.error
case <-c.sessionCtx.Done():
return fmt.Errorf("session closed: %w", c.sessionCtx.Err())
case <-time.After(c.sessionTimeout):
return fmt.Errorf("got a timeout waiting on response for xid %d", header.Xid)
}
}