[pypy-svn] r46633 - pypy/dist/pypy/module/_socket
arigo at codespeak.net
arigo at codespeak.net
Sat Sep 15 12:57:28 CEST 2007
Author: arigo
Date: Sat Sep 15 12:57:27 2007
New Revision: 46633
Modified:
pypy/dist/pypy/module/_socket/interp_func.py
pypy/dist/pypy/module/_socket/interp_socket.py
Log:
Revert r46568 in module/_socket. Big confusion there,
I completely forgot that pypy.rlib.rsocket is still based
on rctypes and thus doesn't get automatic GIL release.
Modified: pypy/dist/pypy/module/_socket/interp_func.py
==============================================================================
--- pypy/dist/pypy/module/_socket/interp_func.py (original)
+++ pypy/dist/pypy/module/_socket/interp_func.py Sat Sep 15 12:57:27 2007
@@ -10,7 +10,12 @@
Return the current host name.
"""
try:
- res = rsocket.gethostname()
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ res = rsocket.gethostname()
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.wrap(res)
@@ -22,7 +27,12 @@
Return the IP address (a string of the form '255.255.255.255') for a host.
"""
try:
- addr = rsocket.gethostbyname(hostname)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ addr = rsocket.gethostbyname(hostname)
+ finally:
+ if GIL is not None: GIL.acquire(True)
ip = addr.get_host()
except SocketError, e:
raise converted_error(space, e)
@@ -43,7 +53,12 @@
for a host. The host argument is a string giving a host name or IP number.
"""
try:
- res = rsocket.gethostbyname_ex(host)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ res = rsocket.gethostbyname_ex(host)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return common_wrapgethost(space, res)
@@ -56,7 +71,12 @@
for a host. The host argument is a string giving a host name or IP number.
"""
try:
- res = rsocket.gethostbyaddr(host)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ res = rsocket.gethostbyaddr(host)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return common_wrapgethost(space, res)
@@ -74,7 +94,12 @@
else:
proto = space.str_w(w_proto)
try:
- port = rsocket.getservbyname(name, proto)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ port = rsocket.getservbyname(name, proto)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.wrap(port)
@@ -92,7 +117,12 @@
else:
proto = space.str_w(w_proto)
try:
- service = rsocket.getservbyport(port, proto)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ service = rsocket.getservbyport(port, proto)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.wrap(service)
@@ -104,7 +134,12 @@
Return the protocol number for the named protocol. (Rarely used.)
"""
try:
- proto = rsocket.getprotobyname(name)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ proto = rsocket.getprotobyname(name)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
return space.wrap(proto)
@@ -115,8 +150,14 @@
Get host and port for a sockaddr."""
try:
- addr = rsocket.ipaddr_from_object(space, w_sockaddr)
- host, servport = rsocket.getnameinfo(addr, flags)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ addr = rsocket.ipaddr_from_object(space, w_sockaddr)
+ host, servport = rsocket.getnameinfo(addr, flags)
+ finally:
+ if GIL is not None: GIL.acquire(True)
+
except SocketError, e:
raise converted_error(space, e)
return space.newtuple([space.wrap(host), space.wrap(servport)])
@@ -286,8 +327,14 @@
raise OperationError(space.w_TypeError,
space.wrap("Int or String expected"))
try:
- lst = rsocket.getaddrinfo(host, port, family, socktype,
- proto, flags)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ lst = rsocket.getaddrinfo(host, port, family, socktype,
+ proto, flags)
+ finally:
+ if GIL is not None: GIL.acquire(True)
+
except SocketError, e:
raise converted_error(space, e)
lst1 = [space.newtuple([space.wrap(family),
Modified: pypy/dist/pypy/module/_socket/interp_socket.py
==============================================================================
--- pypy/dist/pypy/module/_socket/interp_socket.py (original)
+++ pypy/dist/pypy/module/_socket/interp_socket.py Sat Sep 15 12:57:27 2007
@@ -30,7 +30,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)
return space.newtuple([space.wrap(sock),
addr.as_object(space)])
except SocketError, e:
@@ -45,7 +50,12 @@
sockets the address is a tuple (ifname, proto [,pkttype [,hatype]])
"""
try:
- self.bind(self.addr_from_object(space, w_addr))
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ self.bind(self.addr_from_object(space, w_addr))
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
bind_w.unwrap_spec = ['self', ObjSpace, W_Root]
@@ -56,7 +66,12 @@
Close the socket. It cannot be used after this call.
"""
try:
- self.close()
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ self.close()
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
close_w.unwrap_spec = ['self', ObjSpace]
@@ -68,7 +83,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:
@@ -82,7 +102,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]
@@ -112,7 +137,12 @@
info is a pair (hostaddr, port).
"""
try:
- addr = self.getpeername()
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ addr = self.getpeername()
+ finally:
+ if GIL is not None: GIL.acquire(True)
return addr.as_object(space)
except SocketError, e:
raise converted_error(space, e)
@@ -125,7 +155,12 @@
info is a pair (hostaddr, port).
"""
try:
- addr = self.getsockname()
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ addr = self.getsockname()
+ finally:
+ if GIL is not None: GIL.acquire(True)
return addr.as_object(space)
except SocketError, e:
raise converted_error(space, e)
@@ -167,7 +202,12 @@
will allow before refusing new connections.
"""
try:
- self.listen(backlog)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ self.listen(backlog)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
listen_w.unwrap_spec = ['self', ObjSpace, int]
@@ -192,7 +232,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)
@@ -204,7 +250,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)
if addr:
w_addr = addr.as_object(space)
else:
@@ -223,7 +274,12 @@
"""
data = coerce_to_str_w(space, w_data)
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)
@@ -239,7 +295,12 @@
"""
data = coerce_to_str_w(space, w_data)
try:
- count = 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, W_Root, int]
@@ -260,8 +321,13 @@
flags = space.int_w(w_param2)
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:
+ addr = self.addr_from_object(space, w_addr)
+ 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)
@@ -325,7 +391,12 @@
(flag == SHUT_RDWR).
"""
try:
- self.shutdown(how)
+ GIL = space.threadlocals.getGIL()
+ if GIL is not None: GIL.release()
+ try:
+ self.shutdown(how)
+ finally:
+ if GIL is not None: GIL.acquire(True)
except SocketError, e:
raise converted_error(space, e)
shutdown_w.unwrap_spec = ['self', ObjSpace, int]
More information about the Pypy-commit
mailing list