Nadeem Vawda <nadeem.va...@gmail.com> added the comment:

Looking at the warnings from test_urllib2net, it seems that they all originate 
in the FTP tests:
* OtherNetworkTests.test_ftp()
* TimeoutTest.test_ftp_basic()
* TimeoutTest.test_ftp_default_timeout()

Most of these leaks seem to stem from the fact that socket.SocketIO.close() 
doesn't behave as documented. According to its docstring, it is meant to 
decrement the underlying socket's refcount, and close it if the refcount drops 
to zero. However, to do this job it calls socket._decref_socketios(), which is 
defined as follows:

    def _decref_socketios(self):
        if self._io_refs > 0:
            self._io_refs -= 1
        if self._closed:
            self.close()

Clearly, this doesn't do what the docstring describes. Changing the second 
conditional from "if self._closed:" to "if self._io_refs <= 0:" disposes of all 
but one of the ResourceWarnings, but also breaks 8 tests in test_socket. It 
seems that the tests expect a socket to remain open after all referring 
SocketIO objects have been closed, which contradicts the docstring for 
SocketIO.close(). I suppose I should open a separate issue for this.


The remaining warning occurs in test_ftp() when retrieving a non-existent file; 
I haven't yet managed to figure out what is causing it.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue10512>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to