[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