Skip to content

Commit 855df82

Browse files
committed
minor optimization
1 parent e6e1b26 commit 855df82

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

connection.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,9 @@ func (conn *Connection) reader() {
171171
conn.closeConnection(err)
172172
continue
173173
}
174-
resp, err := newResponse(resp_bytes)
174+
resp := Response{buf:smallBuf{b:resp_bytes}}
175+
err = resp.decodeHeader()
176+
//resp, err := newResponse(resp_bytes)
175177
if err != nil {
176178
conn.closeConnection(err)
177179
continue

request.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,10 @@ type Request struct {
1616
type Future struct {
1717
conn *Connection
1818
id uint32
19-
resp *Response
19+
resp Response
2020
err error
2121
c chan struct{}
2222
t *time.Timer
23-
tc <-chan time.Time
2423
}
2524

2625
func (conn *Connection) NewRequest(requestCode int32) (req *Request) {
@@ -217,7 +216,6 @@ func (req *Request) future() (f *Future) {
217216

218217
if req.conn.opts.Timeout > 0 {
219218
f.t = time.NewTimer(req.conn.opts.Timeout)
220-
f.tc = f.t.C
221219
}
222220
return
223221
}
@@ -226,32 +224,35 @@ func (f *Future) wait() {
226224
select {
227225
case <-f.c:
228226
default:
229-
select {
230-
case <-f.c:
231-
case <-f.tc:
232-
f.conn.mutex.Lock()
233-
if _, ok := f.conn.requests[f.id]; ok {
234-
delete(f.conn.requests, f.id)
235-
close(f.c)
236-
f.err = errors.New("client timeout")
227+
if t := f.t; t != nil {
228+
select {
229+
case <-f.c:
230+
case <-t.C:
231+
f.conn.mutex.Lock()
232+
if _, ok := f.conn.requests[f.id]; ok {
233+
delete(f.conn.requests, f.id)
234+
close(f.c)
235+
f.err = errors.New("client timeout")
236+
}
237+
f.conn.mutex.Unlock()
237238
}
238-
f.conn.mutex.Unlock()
239+
} else {
240+
<-f.c
239241
}
240242
}
241243
if f.t != nil {
242244
f.t.Stop()
243245
f.t = nil
244-
f.tc = nil
245246
}
246247
}
247248

248249
func (f *Future) Get() (*Response, error) {
249250
f.wait()
250251
if f.err != nil {
251-
return f.resp, f.err
252+
return &f.resp, f.err
252253
}
253254
f.err = f.resp.decodeBody()
254-
return f.resp, f.err
255+
return &f.resp, f.err
255256
}
256257

257258
func (f *Future) GetTyped(r interface{}) (error) {

0 commit comments

Comments
 (0)