From dd00568d44383890cff03d566c014252e096fbfc Mon Sep 17 00:00:00 2001 From: Bryan Matsuo Date: Thu, 4 Dec 2014 18:09:24 -0800 Subject: [PATCH] assign a sequence id to the cookie before returning from Conn.NewRequest --- nexgb/xgb.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nexgb/xgb.go b/nexgb/xgb.go index 4403ea0..e7f2411 100644 --- a/nexgb/xgb.go +++ b/nexgb/xgb.go @@ -290,6 +290,9 @@ func (c *Conn) generateSeqIds() { type request struct { buf []byte cookie *Cookie + + // seq is closed when the request (cookie) has been sequenced by the Conn. + seq chan struct{} } // NewRequest takes the bytes and a cookie of a particular request, constructs @@ -311,7 +314,9 @@ type request struct { // In all likelihood, you should be able to copy and paste with some minor // edits the generated code for the request you want to issue. func (c *Conn) NewRequest(buf []byte, cookie *Cookie) { - c.reqChan <- &request{buf: buf, cookie: cookie} + seq := make(chan struct{}) + c.reqChan <- &request{buf: buf, cookie: cookie, seq: seq} + <-seq } // sendRequests is run as a single goroutine that takes requests and writes @@ -329,6 +334,7 @@ func (c *Conn) sendRequests() { c.noop() } req.cookie.Sequence = c.newSequenceId() + close(req.seq) c.cookieChan <- req.cookie c.writeBuffer(req.buf) }