summaryrefslogtreecommitdiffstats
path: root/Modules/_asynciomodule.c
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2020-07-08 19:47:20 (GMT)
committerGitHub <noreply@github.com>2020-07-08 19:47:20 (GMT)
commitfbd71f66843aea71c09656f17a196d29d5d484af (patch)
tree3490497a9dd6ff0cd93a8b81e9a66c12f0f1b4aa /Modules/_asynciomodule.c
parenta0a6f1167834c87f12e2eca11dd77143103e7691 (diff)
downloadcpython-fbd71f66843aea71c09656f17a196d29d5d484af.zip
cpython-fbd71f66843aea71c09656f17a196d29d5d484af.tar.gz
cpython-fbd71f66843aea71c09656f17a196d29d5d484af.tar.bz2
bpo-41247: asyncio.set_running_loop() cache running loop holder (GH-21401)
The running loop holder cache variable was always set to NULL when calling set_running_loop. Now set_running_loop saves the newly created running loop holder in the cache variable for faster access in get_running_loop. Automerge-Triggered-By: @1st1 (cherry picked from commit 529f42645d38b6b0075f256814dfb3d220ac7d92) Co-authored-by: Tony Solomonik <tony.solomonik@gmail.com>
Diffstat (limited to 'Modules/_asynciomodule.c')
-rw-r--r--Modules/_asynciomodule.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 22eea3b..b615c48 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -291,10 +291,13 @@ error:
static int
set_running_loop(PyObject *loop)
{
- cached_running_holder = NULL;
- cached_running_holder_tsid = 0;
+ PyObject *ts_dict = NULL;
+
+ PyThreadState *tstate = PyThreadState_Get();
+ if (tstate != NULL) {
+ ts_dict = _PyThreadState_GetDict(tstate); // borrowed
+ }
- PyObject *ts_dict = PyThreadState_GetDict(); // borrowed
if (ts_dict == NULL) {
PyErr_SetString(
PyExc_RuntimeError, "thread-local storage is not available");
@@ -314,6 +317,9 @@ set_running_loop(PyObject *loop)
}
Py_DECREF(rl);
+ cached_running_holder = (PyObject *)rl;
+ cached_running_holder_tsid = PyThreadState_GetID(tstate);
+
return 0;
}