[pypy-svn] r34429 - in pypy/dist: lib-python/modified-2.4.1 lib-python/modified-2.4.1/test pypy/module/rsocket
ac at codespeak.net
ac at codespeak.net
Thu Nov 9 18:02:41 CET 2006
Author: ac
Date: Thu Nov 9 18:02:40 2006
New Revision: 34429
Added:
pypy/dist/lib-python/modified-2.4.1/socket.py
- copied, changed from r34409, pypy/dist/lib-python/2.4.1/socket.py
Modified:
pypy/dist/lib-python/modified-2.4.1/test/test_socket.py
pypy/dist/pypy/module/rsocket/interp_socket.py
Log:
Implement explicit refcounting for sockets
Modified: pypy/dist/lib-python/modified-2.4.1/test/test_socket.py
==============================================================================
--- pypy/dist/lib-python/modified-2.4.1/test/test_socket.py (original)
+++ pypy/dist/lib-python/modified-2.4.1/test/test_socket.py Thu Nov 9 18:02:40 2006
@@ -26,7 +26,6 @@
def tearDown(self):
self.serv.close()
self.serv = None
- gc.collect()
class SocketUDPTest(unittest.TestCase):
@@ -38,7 +37,6 @@
def tearDown(self):
self.serv.close()
self.serv = None
- gc.collect()
class ThreadableTest:
"""Threadable Test class
@@ -136,7 +134,6 @@
def clientTearDown(self):
self.done.set()
- gc.collect()
thread.exit()
class ThreadedTCPSocketTest(SocketTCPTest, ThreadableTest):
@@ -224,6 +221,7 @@
s.close()
s = None
gc.collect()
+ gc.collect()
try:
p.fileno()
except ReferenceError:
Modified: pypy/dist/pypy/module/rsocket/interp_socket.py
==============================================================================
--- pypy/dist/pypy/module/rsocket/interp_socket.py (original)
+++ pypy/dist/pypy/module/rsocket/interp_socket.py Thu Nov 9 18:02:40 2006
@@ -354,6 +354,31 @@
raise converted_error(space, e)
shutdown_w.unwrap_spec = ['self', ObjSpace, int]
+ #------------------------------------------------------------
+ # Support functions for socket._socketobject
+ usecount = 1
+ def _reuse_w(self):
+ """_resue()
+
+ Increase the usecount of the socketobject.
+ Intended only to be used by socket._socketobject
+ """
+ self.usecount += 1
+ _reuse_w.unwrap_spec = ['self']
+
+ def _drop_w(self, space):
+ """_drop()
+
+ Decrease the usecount of the socketobject. If the
+ usecount reaches 0 close the socket.
+ Intended only to be used by socket._socketobject
+ """
+ self.usecount -= 1
+ if self.usecount > 0:
+ return
+ self.close_w(space)
+ _drop_w.unwrap_spec = ['self', ObjSpace]
+
app_makefile = gateway.applevel(r'''
def makefile(self, mode="r", buffersize=-1):
"""makefile([mode[, buffersize]]) -> file object
@@ -399,7 +424,7 @@
accept bind close connect connect_ex dup fileno
getpeername getsockname getsockopt gettimeout listen makefile
recv recvfrom send sendall sendto setblocking
-setsockopt settimeout shutdown
+setsockopt settimeout shutdown _reuse _drop
""".split()
socketmethods = {}
for methodname in socketmethodnames:
More information about the Pypy-commit
mailing list