Skip to content
This repository has been archived by the owner on Jan 21, 2021. It is now read-only.

Commit

Permalink
Merge pull request #4 from zopefoundation/patrick-fix-fd-leak
Browse files Browse the repository at this point in the history
fix a file descriptor leak
  • Loading branch information
Jim Fulton committed Oct 29, 2014
2 parents 21cf1d8 + af27b52 commit 0e537c1
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/zc/resumelb/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,27 @@ def dont_reset_worker_backlogs_if_they_already_have_them():
9
"""

def worker_closes_socket():
"""
Disconnecting from a worker does not leak a file descriptor.
>>> worker = zc.resumelb.worker.Worker(
... zc.resumelb.tests.app(), ('127.0.0.1', 0))
>>> import gevent
>>> import gevent.socket
>>> sock = gevent.socket.create_connection(worker.addr)
>>> gevent.sleep(0.1)
>>> conn = list(worker.connections)[0]
>>> sock.close()
>>> gevent.sleep(0.1)
>>> conn.socket # doctest: +ELLIPSIS
<socket at 0x... fileno=[Errno 9] Bad file descriptor>
"""

def test_classifier(env):
return "yup, it's a test"

Expand Down
2 changes: 2 additions & 0 deletions src/zc/resumelb/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ def connected(self, socket, addr=None):
gevent.Greenlet.spawn(writer, writeq, socket, self)
self.put = writeq.put
self.is_connected = True
self.socket = socket
return self.readers

def __len__(self):
Expand All @@ -261,6 +262,7 @@ def disconnected(self):
self.is_connected = False
for put in self.readers.itervalues():
put(None)
self.socket.close()

self.put = self.put_disconnected

Expand Down

0 comments on commit 0e537c1

Please sign in to comment.