Message21287
Martin, I think the rev 50844 is wrong. To start with,
it goes clearly against the documentation for makefile()
which states that both the socket and the pseudo-file
can be closed independently. What httplib.py was doing
was correct.
I could write a whole essay about the twisted history
of socket.py. It would boil down to: in r43746, Georg
removed a comment that was partially out-of-date,
but that was essential in explaining why there was no
self._sock.close() in _socketobject.close(): because
the original purpose of _socketobject was to implement
dup(), so that multiple _socketobjects could refer to
the same underlying _sock. The latter would close
automagically when its reference counter dropped to
zero. (This means that your check-in also made dup()
stop working on all platforms.)
The real OP's problem is that the _ssl object keeps
a reference to the underlying _sock as well, as
kxroberto pointed out. We need somewhere code that
closes the _ssl object...
For reference, PyPy - which doesn't have strong
refcounting guarantees - added the equivalent of an
explicit usage counter in the C socket object, and
socket.py calls methods on its underlying object to
increment and decrement that counter. It looks like
a solution for CPython too - at least, relying on
refcounting is bad, if only because - as you have
just proved - it creates confusion. (Also,
httplib/urllib have their own explicitly-refcounted
wrappers...) |
|
Date |
User |
Action |
Args |
2007-08-23 14:22:54 | admin | link | issue978833 messages |
2007-08-23 14:22:54 | admin | create | |
|