diff options
author | Benjamin Peterson <benjamin@python.org> | 2010-09-10 22:47:02 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2010-09-10 22:47:02 (GMT) |
commit | d2be5b4fe4cbca197d27e853a08e6339945c879a (patch) | |
tree | 572b7ca23d87510ec0da494f573292567042eb37 | |
parent | b4ba986a7170ab02059a149737928b00d30fa306 (diff) | |
download | cpython-d2be5b4fe4cbca197d27e853a08e6339945c879a.zip cpython-d2be5b4fe4cbca197d27e853a08e6339945c879a.tar.gz cpython-d2be5b4fe4cbca197d27e853a08e6339945c879a.tar.bz2 |
remove gil_drop_request in --without-threads
-rw-r--r-- | Python/ceval.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index ff505a5..2c7f57b 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -217,16 +217,24 @@ PyEval_GetCallStats(PyObject *self) #endif +#ifdef WITH_THREAD +#define GIL_REQUEST _Py_atomic_load_relaxed(&gil_drop_request) +#else +#define GIL_REQUEST 0 +#endif + /* This can set eval_breaker to 0 even though gil_drop_request became 1. We believe this is all right because the eval loop will release the GIL eventually anyway. */ #define COMPUTE_EVAL_BREAKER() \ _Py_atomic_store_relaxed( \ &eval_breaker, \ - _Py_atomic_load_relaxed(&gil_drop_request) | \ + GIL_REQUEST | \ _Py_atomic_load_relaxed(&pendingcalls_to_do) | \ pending_async_exc) +#ifdef WITH_THREAD + #define SET_GIL_DROP_REQUEST() \ do { \ _Py_atomic_store_relaxed(&gil_drop_request, 1); \ @@ -239,6 +247,8 @@ PyEval_GetCallStats(PyObject *self) COMPUTE_EVAL_BREAKER(); \ } while (0) +#endif + /* Pending calls are only modified under pending_lock */ #define SIGNAL_PENDING_CALLS() \ do { \ @@ -387,7 +397,6 @@ PyEval_ReInitThreads(void) #else static _Py_atomic_int eval_breaker = {0}; -static _Py_atomic_int gil_drop_request = {0}; static int pending_async_exc = 0; #endif /* WITH_THREAD */ @@ -1277,8 +1286,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) goto on_error; } } - if (_Py_atomic_load_relaxed(&gil_drop_request)) { #ifdef WITH_THREAD + if (_Py_atomic_load_relaxed(&gil_drop_request)) { /* Give another thread a chance */ if (PyThreadState_Swap(NULL) != tstate) Py_FatalError("ceval: tstate mix-up"); @@ -1289,8 +1298,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag) take_gil(tstate); if (PyThreadState_Swap(tstate) != NULL) Py_FatalError("ceval: orphan tstate"); -#endif } +#endif /* Check for asynchronous exceptions. */ if (tstate->async_exc != NULL) { x = tstate->async_exc; |