@@ -87,12 +87,8 @@ def read(self, n):
8787 else :
8888 value = bytearray (self ._view [start :end ])
8989 n -= end - start
90- continue
9190 return memoryview (value )
9291
93- def close (self ):
94- self ._view = None
95-
9692
9793class ChunkedInputBuffer (object ):
9894
@@ -213,7 +209,6 @@ def discard_message(self):
213209 self ._frame .close ()
214210 self ._origin = self ._limit
215211 self ._limit = - 1
216- self ._frame .close () # close the frame to release the reference
217212 self ._frame = None
218213
219214
@@ -236,25 +231,23 @@ def clear(self):
236231 self ._data [0 :2 ] = b"\x00 \x00 "
237232
238233 def write (self , b ):
239- new_data_start = 0
240- new_data_size = len (b )
241- data_size = self ._end - self ._start
242- if data_size > new_data_size :
243- new_end = self ._end + new_data_size
244- self ._data [self ._end :new_end ] = bytearray (data_size )
245- while new_data_start < new_data_size :
246- chunk_occupied = self ._end - self ._start
247- chunk_remaining = self ._max_chunk_size - chunk_occupied
248- if chunk_remaining == 0 :
234+ to_write = len (b )
235+ max_chunk_size = self ._max_chunk_size
236+ pos = 0
237+ while to_write > 0 :
238+ chunk_size = self ._end - self ._start
239+ remaining = max_chunk_size - chunk_size
240+ if remaining == 0 or remaining < to_write <= max_chunk_size :
249241 self .chunk ()
250- chunk_remaining = self ._max_chunk_size
251- chunk_write_size = min (chunk_remaining , new_data_size - new_data_start )
252- new_end = self ._end + chunk_write_size
253- new_chunk_size = new_end - self ._start
254- self ._data [self ._end :new_end ] = b [new_data_start :(new_data_start + chunk_write_size )]
255- new_data_start += chunk_write_size
256- self ._end = new_end
257- self ._data [self ._header :(self ._header + 2 )] = struct_pack (">H" , new_chunk_size )
242+ else :
243+ wrote = min (to_write , remaining )
244+ new_end = self ._end + wrote
245+ self ._data [self ._end :new_end ] = b [pos :pos + wrote ]
246+ self ._end = new_end
247+ pos += wrote
248+ new_chunk_size = self ._end - self ._start
249+ self ._data [self ._header :(self ._header + 2 )] = struct_pack (">H" , new_chunk_size )
250+ to_write -= wrote
258251
259252 def chunk (self ):
260253 self ._header = self ._end
0 commit comments