Author: Armin Rigo <[email protected]>
Branch: errno-again
Changeset: r75364:ecb186950165
Date: 2015-01-15 23:12 +0100
http://bitbucket.org/pypy/pypy/changeset/ecb186950165/
Log: Can't call a function with save_err != 0 from a __del__
diff --git a/pypy/module/_multiprocessing/interp_semaphore.py
b/pypy/module/_multiprocessing/interp_semaphore.py
--- a/pypy/module/_multiprocessing/interp_semaphore.py
+++ b/pypy/module/_multiprocessing/interp_semaphore.py
@@ -83,6 +83,8 @@
[rffi.CCHARP, rffi.INT, rffi.INT, rffi.UINT],
SEM_T, save_err=rffi.RFFI_SAVE_ERRNO)
# sem_close is releasegil=False to be able to use it in the __del__
+ _sem_close_no_errno = external('sem_close', [SEM_T], rffi.INT,
+ releasegil=False)
_sem_close = external('sem_close', [SEM_T], rffi.INT, releasegil=False,
save_err=rffi.RFFI_SAVE_ERRNO)
_sem_unlink = external('sem_unlink', [rffi.CCHARP], rffi.INT,
@@ -328,7 +330,7 @@
return sem
def delete_semaphore(handle):
- sem_close(handle)
+ _sem_close_no_errno(handle)
def semlock_acquire(self, space, block, w_timeout):
if not block:
diff --git a/pypy/module/select/interp_kqueue.py
b/pypy/module/select/interp_kqueue.py
--- a/pypy/module/select/interp_kqueue.py
+++ b/pypy/module/select/interp_kqueue.py
@@ -3,7 +3,7 @@
from pypy.interpreter.error import exception_from_saved_errno
from pypy.interpreter.gateway import interp2app, unwrap_spec, WrappedDefault
from pypy.interpreter.typedef import TypeDef, generic_new_descr, GetSetProperty
-from rpython.rlib._rsocket_rffi import socketclose
+from rpython.rlib._rsocket_rffi import socketclose_no_errno
from rpython.rlib.rarithmetic import r_uint
from rpython.rtyper.lltypesystem import rffi, lltype
from rpython.rtyper.tool import rffi_platform
@@ -130,7 +130,7 @@
if not self.get_closed():
kqfd = self.kqfd
self.kqfd = -1
- socketclose(kqfd)
+ socketclose_no_errno(kqfd)
def check_closed(self, space):
if self.get_closed():
diff --git a/rpython/rlib/_rsocket_rffi.py b/rpython/rlib/_rsocket_rffi.py
--- a/rpython/rlib/_rsocket_rffi.py
+++ b/rpython/rlib/_rsocket_rffi.py
@@ -489,11 +489,13 @@
socket = external('socket', [rffi.INT, rffi.INT, rffi.INT], socketfd_type)
if WIN32:
- socketclose = external('closesocket', [socketfd_type], rffi.INT,
- releasegil=False, save_err=SAVE_ERR)
+ socketclosename = 'closesocket'
else:
- socketclose = external('close', [socketfd_type], rffi.INT,
- releasegil=False, save_err=SAVE_ERR)
+ socketclosename = 'close'
+socketclose = external(socketclosename, [socketfd_type], rffi.INT,
+ releasegil=False, save_err=SAVE_ERR)
+socketclose_no_errno = external(socketclosename, [socketfd_type], rffi.INT,
+ releasegil=False)
socketconnect = external('connect', [socketfd_type, sockaddr_ptr, socklen_t],
rffi.INT, save_err=SAVE_ERR)
diff --git a/rpython/rlib/rsocket.py b/rpython/rlib/rsocket.py
--- a/rpython/rlib/rsocket.py
+++ b/rpython/rlib/rsocket.py
@@ -517,7 +517,7 @@
fd = self.fd
if fd != _c.INVALID_SOCKET:
self.fd = _c.INVALID_SOCKET
- _c.socketclose(fd)
+ _c.socketclose_no_errno(fd)
if hasattr(_c, 'fcntl'):
def _setblocking(self, block):
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit