@@ -581,7 +581,7 @@ def __init__(self, loop, sock, protocol, waiter=None,
581581 self ._loop .add_reader (self ._sock_fd , self ._read_ready )
582582 self ._loop .call_soon (self ._protocol .connection_made , self )
583583 if waiter is not None :
584- # wait until protocol. connection_made() has been called
584+ # only wake up the waiter when connection_made() has been called
585585 self ._loop .call_soon (waiter ._set_result_unless_cancelled , None )
586586
587587 def pause_reading (self ):
@@ -732,6 +732,16 @@ def __init__(self, loop, rawsock, protocol, sslcontext, waiter=None,
732732 start_time = None
733733 self ._on_handshake (start_time )
734734
735+ def _wakeup_waiter (self , exc = None ):
736+ if self ._waiter is None :
737+ return
738+ if not self ._waiter .cancelled ():
739+ if exc is not None :
740+ self ._waiter .set_exception (exc )
741+ else :
742+ self ._waiter .set_result (None )
743+ self ._waiter = None
744+
735745 def _on_handshake (self , start_time ):
736746 try :
737747 self ._sock .do_handshake ()
@@ -750,8 +760,7 @@ def _on_handshake(self, start_time):
750760 self ._loop .remove_reader (self ._sock_fd )
751761 self ._loop .remove_writer (self ._sock_fd )
752762 self ._sock .close ()
753- if self ._waiter is not None and not self ._waiter .cancelled ():
754- self ._waiter .set_exception (exc )
763+ self ._wakeup_waiter (exc )
755764 if isinstance (exc , Exception ):
756765 return
757766 else :
@@ -774,9 +783,7 @@ def _on_handshake(self, start_time):
774783 "on matching the hostname" ,
775784 self , exc_info = True )
776785 self ._sock .close ()
777- if (self ._waiter is not None
778- and not self ._waiter .cancelled ()):
779- self ._waiter .set_exception (exc )
786+ self ._wakeup_waiter (exc )
780787 return
781788
782789 # Add extra info that becomes available after handshake.
@@ -789,10 +796,8 @@ def _on_handshake(self, start_time):
789796 self ._write_wants_read = False
790797 self ._loop .add_reader (self ._sock_fd , self ._read_ready )
791798 self ._loop .call_soon (self ._protocol .connection_made , self )
792- if self ._waiter is not None :
793- # wait until protocol.connection_made() has been called
794- self ._loop .call_soon (self ._waiter ._set_result_unless_cancelled ,
795- None )
799+ # only wake up the waiter when connection_made() has been called
800+ self ._loop .call_soon (self ._wakeup_waiter )
796801
797802 if self ._loop .get_debug ():
798803 dt = self ._loop .time () - start_time
@@ -924,7 +929,7 @@ def __init__(self, loop, sock, protocol, address=None,
924929 self ._loop .add_reader (self ._sock_fd , self ._read_ready )
925930 self ._loop .call_soon (self ._protocol .connection_made , self )
926931 if waiter is not None :
927- # wait until protocol. connection_made() has been called
932+ # only wake up the waiter when connection_made() has been called
928933 self ._loop .call_soon (waiter ._set_result_unless_cancelled , None )
929934
930935 def get_write_buffer_size (self ):
0 commit comments