@@ -77,8 +77,7 @@ def read_line_slow(stream):
7777return line
7878# end
7979
80- def dispatch_line (fno ):
81- stream ,handler ,readline = fdmap [fno ]
80+ def dispatch_line (stream ,handler ,readline ):
8281# this can possibly block for a while, but since we wake-up with at least one or more lines to handle,
8382# we are good ...
8483line = readline (stream ).decode (defenc )
@@ -93,9 +92,9 @@ def dispatch_line(fno):
9392# end dispatch helper
9493# end
9594
96- def deplete_buffer (fno ,wg = None ):
95+ def deplete_buffer (stream , handler , readline ,wg = None ):
9796while True :
98- line = dispatch_line (fno )
97+ line = dispatch_line (stream , handler , readline )
9998if not line :
10099break
101100# end deplete buffer
@@ -124,7 +123,7 @@ def deplete_buffer(fno, wg=None):
124123if result & CLOSED :
125124closed_streams .add (fd )
126125else :
127- dispatch_line (fd )
126+ dispatch_line (* fdmap [ fd ] )
128127# end handle closed stream
129128# end for each poll-result tuple
130129
@@ -134,8 +133,8 @@ def deplete_buffer(fno, wg=None):
134133# end endless loop
135134
136135# Depelete all remaining buffers
137- for fno in fdmap .keys ():
138- deplete_buffer (fno )
136+ for stream , handler , readline in fdmap .values ():
137+ deplete_buffer (stream , handler , readline )
139138# end for each file handle
140139else :
141140# Oh ... probably we are on windows. select.select() can only handle sockets, we have files
@@ -145,7 +144,8 @@ def deplete_buffer(fno, wg=None):
145144wg = WaitGroup ()
146145for fno in fdmap .keys ():
147146wg .add (1 )
148- t = threading .Thread (target = lambda :deplete_buffer (fno ,wg ))
147+ stream ,handler ,readline = fdmap [fno ]
148+ t = threading .Thread (target = lambda :deplete_buffer (stream ,handler ,readline ,wg ))
149149t .start ()
150150# end
151151# NOTE: Just joining threads can possibly fail as there is a gap between .start() and when it's