[pypy-commit] pypy errno-again: GetLastError fix

arigo noreply at buildbot.pypy.org
Fri Jan 16 19:07:27 CET 2015


Author: Armin Rigo <arigo at tunes.org>
Branch: errno-again
Changeset: r75400:e06dabcafed5
Date: 2015-01-16 18:59 +0100
http://bitbucket.org/pypy/pypy/changeset/e06dabcafed5/

Log:	GetLastError fix

diff --git a/pypy/module/_rawffi/interp_rawffi.py b/pypy/module/_rawffi/interp_rawffi.py
--- a/pypy/module/_rawffi/interp_rawffi.py
+++ b/pypy/module/_rawffi/interp_rawffi.py
@@ -18,7 +18,6 @@
 from rpython.rlib.rarithmetic import intmask, r_uint
 from pypy.module._rawffi.buffer import RawFFIBuffer
 from pypy.module._rawffi.tracker import tracker
-from pypy.module._rawffi import lasterror
 
 TYPEMAP = {
     # XXX A mess with unsigned/signed/normal chars :-/
@@ -496,14 +495,10 @@
         try:
             if self.resshape is not None:
                 result = self.resshape.allocate(space, 1, autofree=True)
-                lasterror.restore_last_error(space)
                 self.ptr.call(args_ll, result.ll_buffer)
-                lasterror.save_last_error(space)
                 return space.wrap(result)
             else:
-                lasterror.restore_last_error(space)
                 self.ptr.call(args_ll, lltype.nullptr(rffi.VOIDP.TO))
-                lasterror.save_last_error(space)
                 return space.w_None
         except StackCheckError, e:
             raise OperationError(space.w_ValueError, space.wrap(e.message))
@@ -619,11 +614,13 @@
     rposix.set_saved_errno(space.int_w(w_errno))
 
 if sys.platform == 'win32':
+    # see also
+    # https://bitbucket.org/pypy/pypy/issue/1944/ctypes-on-windows-getlasterror
     def get_last_error(space):
-        return space.wrap(lasterror.fetch_last_error(space))
+        return space.wrap(rwin32.GetLastError_saved())
     @unwrap_spec(error=int)
     def set_last_error(space, error):
-        lasterror.store_last_error(space, error)
+        rwin32.SetLastError_saved(error)
 else:
     # always have at least a dummy version of these functions
     # (https://bugs.pypy.org/issue1242)
diff --git a/pypy/module/_rawffi/lasterror.py b/pypy/module/_rawffi/lasterror.py
deleted file mode 100644
--- a/pypy/module/_rawffi/lasterror.py
+++ /dev/null
@@ -1,40 +0,0 @@
-# For Windows only.
-# https://bitbucket.org/pypy/pypy/issue/1944/ctypes-on-windows-getlasterror
-
-import os
-
-_MS_WINDOWS = os.name == "nt"
-
-
-if _MS_WINDOWS:
-    from rpython.rlib import rwin32
-    from pypy.interpreter.executioncontext import ExecutionContext
-
-
-    ExecutionContext._rawffi_last_error = 0
-
-    def fetch_last_error(space):
-        ec = space.getexecutioncontext()
-        return ec._rawffi_last_error
-
-    def store_last_error(space, last_error):
-        ec = space.getexecutioncontext()
-        ec._rawffi_last_error = last_error
-
-    def restore_last_error(space):
-        ec = space.getexecutioncontext()
-        lasterror = ec._rawffi_last_error
-        rwin32.SetLastError(lasterror)
-
-    def save_last_error(space):
-        lasterror = rwin32.GetLastError()
-        ec = space.getexecutioncontext()
-        ec._rawffi_last_error = lasterror
-
-else:
-
-    def restore_last_error(space):
-        pass
-
-    def save_last_error(space):
-        pass


More information about the pypy-commit mailing list