[pypy-svn] r37657 - pypy/dist/pypy/module/rsocket

ac at codespeak.net ac at codespeak.net
Wed Jan 31 12:04:08 CET 2007


Author: ac
Date: Wed Jan 31 12:04:06 2007
New Revision: 37657

Modified:
   pypy/dist/pypy/module/rsocket/interp_func.py
   pypy/dist/pypy/module/rsocket/interp_socket.py
Log:
Be more paranoid about the GIL.

Modified: pypy/dist/pypy/module/rsocket/interp_func.py
==============================================================================
--- pypy/dist/pypy/module/rsocket/interp_func.py	(original)
+++ pypy/dist/pypy/module/rsocket/interp_func.py	Wed Jan 31 12:04:06 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,7 +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/rsocket/interp_socket.py
==============================================================================
--- pypy/dist/pypy/module/rsocket/interp_socket.py	(original)
+++ pypy/dist/pypy/module/rsocket/interp_socket.py	Wed Jan 31 12:04:06 2007
@@ -36,7 +36,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]
@@ -47,7 +52,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]
@@ -113,7 +123,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)
@@ -126,7 +141,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)
@@ -168,7 +188,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]
@@ -279,10 +304,10 @@
             flags = space.int_w(w_param2)
             w_addr = w_param3
         try:
-            addr = self.addr_from_object(space, w_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)
@@ -349,7 +374,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