@@ -1210,45 +1210,46 @@ async def _reader_task(self):
1210
1210
except ConnectionClosed :
1211
1211
self ._reader_running = False
1212
1212
1213
- while self ._reader_running :
1214
- # Process events.
1215
- for event in self ._wsproto .events ():
1216
- event_type = type (event )
1213
+ async with self ._send_channel :
1214
+ while self ._reader_running :
1215
+ # Process events.
1216
+ for event in self ._wsproto .events ():
1217
+ event_type = type (event )
1218
+ try :
1219
+ handler = handlers [event_type ]
1220
+ logger .debug ('%s received event: %s' , self ,
1221
+ event_type )
1222
+ await handler (event )
1223
+ except KeyError :
1224
+ logger .warning ('%s received unknown event type: "%s"' , self ,
1225
+ event_type )
1226
+ except ConnectionClosed :
1227
+ self ._reader_running = False
1228
+ break
1229
+
1230
+ # Get network data.
1217
1231
try :
1218
- handler = handlers [event_type ]
1219
- logger .debug ('%s received event: %s' , self ,
1220
- event_type )
1221
- await handler (event )
1222
- except KeyError :
1223
- logger .warning ('%s received unknown event type: "%s"' , self ,
1224
- event_type )
1225
- except ConnectionClosed :
1226
- self ._reader_running = False
1232
+ data = await self ._stream .receive_some (RECEIVE_BYTES )
1233
+ except (trio .BrokenResourceError , trio .ClosedResourceError ):
1234
+ await self ._abort_web_socket ()
1227
1235
break
1228
-
1229
- # Get network data.
1230
- try :
1231
- data = await self ._stream .receive_some (RECEIVE_BYTES )
1232
- except (trio .BrokenResourceError , trio .ClosedResourceError ):
1233
- await self ._abort_web_socket ()
1234
- break
1235
- if len (data ) == 0 :
1236
- logger .debug ('%s received zero bytes (connection closed)' ,
1237
- self )
1238
- # If TCP closed before WebSocket, then record it as an abnormal
1239
- # closure.
1236
+ if len (data ) == 0 :
1237
+ logger .debug ('%s received zero bytes (connection closed)' ,
1238
+ self )
1239
+ # If TCP closed before WebSocket, then record it as an abnormal
1240
+ # closure.
1241
+ if self ._wsproto .state != ConnectionState .CLOSED :
1242
+ await self ._abort_web_socket ()
1243
+ break
1244
+ logger .debug ('%s received %d bytes' , self , len (data ))
1240
1245
if self ._wsproto .state != ConnectionState .CLOSED :
1241
- await self ._abort_web_socket ()
1242
- break
1243
- logger .debug ('%s received %d bytes' , self , len (data ))
1244
- if self ._wsproto .state != ConnectionState .CLOSED :
1245
- try :
1246
- self ._wsproto .receive_data (data )
1247
- except wsproto .utilities .RemoteProtocolError as err :
1248
- logger .debug ('%s remote protocol error: %s' , self , err )
1249
- if err .event_hint :
1250
- await self ._send (err .event_hint )
1251
- await self ._close_stream ()
1246
+ try :
1247
+ self ._wsproto .receive_data (data )
1248
+ except wsproto .utilities .RemoteProtocolError as err :
1249
+ logger .debug ('%s remote protocol error: %s' , self , err )
1250
+ if err .event_hint :
1251
+ await self ._send (err .event_hint )
1252
+ await self ._close_stream ()
1252
1253
1253
1254
logger .debug ('%s reader task finished' , self )
1254
1255
0 commit comments