Author: Armin Rigo <ar...@tunes.org> Branch: fast-gil Changeset: r72230:a0d7c3cc50e7 Date: 2014-06-25 19:47 +0200 http://bitbucket.org/pypy/pypy/changeset/a0d7c3cc50e7/
Log: On Windows, save the LastError in addition to the errno diff --git a/rpython/translator/c/src/thread_gil.c b/rpython/translator/c/src/thread_gil.c --- a/rpython/translator/c/src/thread_gil.c +++ b/rpython/translator/c/src/thread_gil.c @@ -68,7 +68,7 @@ } else { /* Otherwise, another thread is busy with the GIL. */ - int old_errno = errno; + SAVE_ERRNO(); /* Register me as one of the threads that is actively waiting for the GIL. The number of such threads is found in @@ -109,7 +109,7 @@ atomic_decrement(&rpy_waiting_threads); mutex_unlock(&mutex_gil_stealer); - errno = old_errno; + RESTORE_ERRNO(); } assert(RPY_FASTGIL_LOCKED(rpy_fastgil)); diff --git a/rpython/translator/c/src/thread_nt.c b/rpython/translator/c/src/thread_nt.c --- a/rpython/translator/c/src/thread_nt.c +++ b/rpython/translator/c/src/thread_nt.c @@ -227,4 +227,9 @@ #define atomic_increment(ptr) InterlockedIncrement(ptr) #define atomic_decrement(ptr) InterlockedDecrement(ptr) +#define SAVE_ERRNO() int saved_errno = errno; \ + DWORD saved_lasterr = GetLastError() +#define RESTORE_ERRNO() errno = saved_errno; \ + SetLastError(saved_lasterr) + #include "src/thread_gil.c" diff --git a/rpython/translator/c/src/thread_pthread.c b/rpython/translator/c/src/thread_pthread.c --- a/rpython/translator/c/src/thread_pthread.c +++ b/rpython/translator/c/src/thread_pthread.c @@ -517,4 +517,7 @@ #define atomic_increment(ptr) __sync_fetch_and_add(ptr, 1) #define atomic_decrement(ptr) __sync_fetch_and_sub(ptr, 1) +#define SAVE_ERRNO() int saved_errno = errno +#define RESTORE_ERRNO() errno = saved_errno + #include "src/thread_gil.c" _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit