@@ -310,10 +310,14 @@ func WithMaxConnBufferSize(maxBufferSize int) connOption {
310310}
311311
312312func (c * Conn ) Close () {
313+ rc , err := c .queueRequest (opClose , & closeRequest {}, & closeResponse {}, nil )
314+ if err != nil {
315+ return
316+ }
313317 close (c .shouldQuit )
314318
315319 select {
316- case <- c . queueRequest ( opClose , & closeRequest {}, & closeResponse {}, nil ) :
320+ case <- rc :
317321 case <- time .After (time .Second ):
318322 }
319323}
@@ -933,7 +937,7 @@ func (c *Conn) addWatcher(path string, watchType watchType) <-chan Event {
933937 return ch
934938}
935939
936- func (c * Conn ) queueRequest (opcode int32 , req interface {}, res interface {}, recvFunc func (* request , * responseHeader , error )) <- chan response {
940+ func (c * Conn ) queueRequest (opcode int32 , req interface {}, res interface {}, recvFunc func (* request , * responseHeader , error )) ( <- chan response , error ) {
937941 rq := & request {
938942 xid : c .nextXid (),
939943 opcode : opcode ,
@@ -942,12 +946,20 @@ func (c *Conn) queueRequest(opcode int32, req interface{}, res interface{}, recv
942946 recvChan : make (chan response , 1 ),
943947 recvFunc : recvFunc ,
944948 }
945- c .sendChan <- rq
946- return rq .recvChan
949+ select {
950+ case c .sendChan <- rq :
951+ return rq .recvChan , nil
952+ case <- c .shouldQuit :
953+ return nil , ErrClosing
954+ }
947955}
948956
949957func (c * Conn ) request (opcode int32 , req interface {}, res interface {}, recvFunc func (* request , * responseHeader , error )) (int64 , error ) {
950- r := <- c .queueRequest (opcode , req , res , recvFunc )
958+ rc , err := c .queueRequest (opcode , req , res , recvFunc )
959+ if err != nil {
960+ return 0 , err
961+ }
962+ r := <- rc
951963 return r .zxid , r .err
952964}
953965
0 commit comments