Author: Armin Rigo <ar...@tunes.org> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit