[pypy-svn] r34250 - pypy/dist/pypy/module/rsocket
ac at codespeak.net
ac at codespeak.net
Sun Nov 5 18:00:20 CET 2006
Author: ac
Date: Sun Nov 5 17:59:59 2006
New Revision: 34250
Modified:
pypy/dist/pypy/module/rsocket/interp_socket.py
Log:
Release the GIL around some functioncalls.
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 Sun Nov 5 17:59:59 2006
@@ -16,7 +16,12 @@
info is a pair (hostaddr, port).
"""
try:
- sock, addr = self.accept(W_RSocket)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ sock, addr = self.accept(W_RSocket)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.newtuple([space.wrap(sock), addr.as_object(space)])
@@ -53,7 +58,12 @@
is a pair (host, port).
"""
try:
- self.connect(self.addr_from_object(space, w_addr))
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ self.connect(self.addr_from_object(space, w_addr))
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
except TypeError, e:
@@ -67,7 +77,12 @@
This is like connect(address), but returns an error code (the errno value)
instead of raising an exception when an error occurs.
"""
- error = self.connect_ex(self.addr_from_object(space, w_addr))
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ error = self.connect_ex(self.addr_from_object(space, w_addr))
+ finally:
+ if GIL is not None: GIL.acquire(True)
return space.wrap(error)
connect_ex_w.unwrap_spec = ['self', ObjSpace, W_Root]
@@ -177,7 +192,13 @@
the remote end is closed and all data is read, return the empty string.
"""
try:
- data = self.recv(buffersize, flags)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ data = self.recv(buffersize, flags)
+ finally:
+ if GIL is not None: GIL.acquire(True)
+
except SocketError, e:
raise converted_error(space, e)
return space.wrap(data)
@@ -189,7 +210,12 @@
Like recv(buffersize, flags) but also return the sender's address info.
"""
try:
- data, addr = self.recvfrom(buffersize, flags)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ data, addr = self.recvfrom(buffersize, flags)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.newtuple([space.wrap(data), addr.as_object(space)])
@@ -203,7 +229,12 @@
sent; this may be less than len(data) if the network is busy.
"""
try:
- count = self.send(data, flags)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ count = self.send(data, flags)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.wrap(count)
@@ -218,7 +249,12 @@
to tell how much data has been sent.
"""
try:
- self.sendall(data, flags)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ count = self.sendall(data, flags)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
sendall_w.unwrap_spec = ['self', ObjSpace, str, int]
@@ -239,7 +275,12 @@
w_addr = w_param3
try:
addr = self.addr_from_object(space, w_addr)
- count = self.sendto(data, flags, addr)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ count = self.sendto(data, flags, addr)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.wrap(count)
More information about the pypy-svn
mailing list