On Mon, Apr 14, 2008 at 9:12 AM, Ralf Schmitt <[EMAIL PROTECTED]> wrote:
>
> I've tracked it down to this change:
> http://hgpy.de/py/release25-maint/rev/e9446c6ab3cd
> this is svn revision 61009.
> [...]
> self._rbufsize if 1, and so the code reads one byte at a time

The change is correct, but exposes a flaw earlier in the same method.
"_rbufsize == 1" represents a request to buffer "by line", which is
clearly irrelevant in this context.  A request to read n bytes should
just use the default buffer size if buffering "by line".  Sample patch
is attached.


--
Curt Hagenlocher
[EMAIL PROTECTED]
***  
---  
***************
*** 277,294 ****
  
      def read(self, size=-1):
          data = self._rbuf
          if size < 0:
              # Read until EOF
              buffers = []
              if data:
                  buffers.append(data)
              self._rbuf = ""
-             if self._rbufsize <= 1:
-                 recv_size = self.default_bufsize
-             else:
-                 recv_size = self._rbufsize
              while True:
!                 data = self._sock.recv(recv_size)
                  if not data:
                      break
                  buffers.append(data)
--- 277,294 ----
  
      def read(self, size=-1):
          data = self._rbuf
+         if self._rbufsize <= 1:
+             rbufsize = self.default_bufsize
+         else:
+             rbufsize = self._rbufsize
          if size < 0:
              # Read until EOF
              buffers = []
              if data:
                  buffers.append(data)
              self._rbuf = ""
              while True:
!                 data = self._sock.recv(rbufsize)
                  if not data:
                      break
                  buffers.append(data)
***************
*** 305,311 ****
              self._rbuf = ""
              while True:
                  left = size - buf_len
!                 recv_size = max(self._rbufsize, left)
                  data = self._sock.recv(recv_size)
                  if not data:
                      break
--- 305,311 ----
              self._rbuf = ""
              while True:
                  left = size - buf_len
!                 recv_size = max(rbufsize, left)
                  data = self._sock.recv(recv_size)
                  if not data:
                      break
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to