[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