@@ -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