[Zope3-dev] Zope3 vs CVS Python
Tres Seaver
tseaver@zope.com
07 Aug 2002 09:42:22 -0400
On Tue, 2002-08-06 at 23:55, Tim Peters wrote:
> [Guido]
> > You realize that 'UNKNOWN' is a constant in httplib.py and used to
> > initialize self.length, right? (In __init__.)
>
> Yes.
>
> > It looks like the read() method is simply not expecting this when it
> > tests for "if self.length is not None" a few lines before line 431
> > (the crash point).
>
> I don't know; as I said, the other problem with the NULL-pointer crash under
> a debug build looked more important to me, and I assume (with nearly 100%
> chance of being correct <wink>) that dozens of people would be more
> efficient in tracking down an httplib-related glitch than I would be (while
> I'm more likely to make progress on the NULL-pointer crash).
>
> > Hm, didn't you say that this doesn't fail under Python 2.2.1?
>
> Right, that's true under Win98SE. I didn't try that under Win2K, but would
> be surprised if it weren't also true there.
>
> > And that it started failing about a month ago?
>
> I didn't say that, no. Yesterday was the first time in a long time I had
> completely clean checkouts of both Zope3 and CVS Python, and I just reported
> what I saw then. As far as I can remember, the pipelining test has never
> passed when I've tried it, but used to fail in a different way (something
> about an "unprintable instance object").
>
> > Maybe the recent changes to socket.py or socketmodule.c for timeout
> sockets
> > have broken this, by changing the way buffering is done. The HTTPResponse
> > class uses sock.makefile(), whose Windows implementation *did* change as
> part
> > of the timeout changes; and I don't have 100% faith in the changes.
> >
> > You could try reverting socket.py to revision 1.19; this will break
> > the timeout feature, but AFAIK Zope doesn't use that, and it should
> > revert any changes introduced by that feature to the _fileobject class
> > returned (on Windows only) by s.makefile().
>
> OK, I'll try this, but not today.
>
> > If that makes the failures go away, we can do a close reading of the
> > changes to _fileobject tomorrow. (We'll make you a socket expert
> > yet. :-)
>
> Offhand I expect the "fails if and only if count > 1" clue is a direct clue
> that hasn't been mined:
>
> to_send = ''
> count = 25
> for n in range(count):
> body = "Response #%d\r\n" % (n + 1)
> if n + 1 < count:
> conn = 'keep-alive'
> else:
> conn = 'close'
> to_send += s % (conn, len(body), body)
>
> I don't know what this is doing, but somebody does <wink>.
Hmm, it looks as though when 'count' is 1, then no pipelining will be
done at all; the connection will be closed "normally".
Tres.
--
===============================================================
Tres Seaver tseaver@zope.com
Zope Corporation "Zope Dealers" http://www.zope.com