@@ -4800,13 +4800,13 @@ func (s *Session) acquireSocket(slaveOk bool) (*mongoSocket, error) {
48004800 s .m .RLock ()
48014801 // If there is a slave socket reserved and its use is acceptable, take it as long
48024802 // as there isn't a master socket which would be preferred by the read preference mode.
4803- if s .slaveSocket != nil && s .slaveOk && slaveOk && (s .masterSocket == nil || s .consistency != PrimaryPreferred && s .consistency != Monotonic ) {
4803+ if s .slaveSocket != nil && s .slaveSocket . dead == nil && s . slaveOk && slaveOk && (s .masterSocket == nil || s .consistency != PrimaryPreferred && s .consistency != Monotonic ) {
48044804 socket := s .slaveSocket
48054805 socket .Acquire ()
48064806 s .m .RUnlock ()
48074807 return socket , nil
48084808 }
4809- if s .masterSocket != nil {
4809+ if s .masterSocket != nil && s . masterSocket . dead == nil {
48104810 socket := s .masterSocket
48114811 socket .Acquire ()
48124812 s .m .RUnlock ()
@@ -4820,12 +4820,20 @@ func (s *Session) acquireSocket(slaveOk bool) (*mongoSocket, error) {
48204820 defer s .m .Unlock ()
48214821
48224822 if s .slaveSocket != nil && s .slaveOk && slaveOk && (s .masterSocket == nil || s .consistency != PrimaryPreferred && s .consistency != Monotonic ) {
4823- s .slaveSocket .Acquire ()
4824- return s .slaveSocket , nil
4823+ if s .slaveSocket .dead == nil {
4824+ s .slaveSocket .Acquire ()
4825+ return s .slaveSocket , nil
4826+ } else {
4827+ s .unsetSocket ()
4828+ }
48254829 }
48264830 if s .masterSocket != nil {
4827- s .masterSocket .Acquire ()
4828- return s .masterSocket , nil
4831+ if s .masterSocket .dead == nil {
4832+ s .masterSocket .Acquire ()
4833+ return s .masterSocket , nil
4834+ } else {
4835+ s .unsetSocket ()
4836+ }
48294837 }
48304838
48314839 // Still not good. We need a new socket.
@@ -4876,9 +4884,11 @@ func (s *Session) setSocket(socket *mongoSocket) {
48764884// unsetSocket releases any slave and/or master sockets reserved.
48774885func (s * Session ) unsetSocket () {
48784886 if s .masterSocket != nil {
4887+ debugf ("unset master socket from session %p" , s )
48794888 s .masterSocket .Release ()
48804889 }
48814890 if s .slaveSocket != nil {
4891+ debugf ("unset slave socket from session %p" , s )
48824892 s .slaveSocket .Release ()
48834893 }
48844894 s .masterSocket = nil
0 commit comments