summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorYury Selivanov <yury@magic.io>2018-01-25 14:18:55 -0500
committerGitHub <noreply@github.com>2018-01-25 14:18:55 -0500
commit6ab62920c87930dedc31fe633ecda3e51d3d7503 (patch)
tree41524fb4f9cf00dcbbb747780c952535113478d9 /Python
parentb31206a223955d614d7769f95fb979d60f77bf87 (diff)
downloadcpython-git-6ab62920c87930dedc31fe633ecda3e51d3d7503.tar.gz
bpo-32436: Fix a refleak; var GC tracking; a GCC warning (#5326)
The refleak in question wasn't really important, as context vars are usually created at the toplevel and live as long as the interpreter lives, so the context var name isn't ever GCed anyways.
Diffstat (limited to 'Python')
-rw-r--r--Python/context.c8
-rw-r--r--Python/hamt.c2
2 files changed, 6 insertions, 4 deletions
diff --git a/Python/context.c b/Python/context.c
index 5439531cd1..d90ed25c4d 100644
--- a/Python/context.c
+++ b/Python/context.c
@@ -134,7 +134,9 @@ PyContextVar_New(const char *name, PyObject *def)
if (pyname == NULL) {
return NULL;
}
- return contextvar_new(pyname, def);
+ PyContextVar *var = contextvar_new(pyname, def);
+ Py_DECREF(pyname);
+ return var;
}
@@ -741,8 +743,8 @@ contextvar_new(PyObject *name, PyObject *def)
var->var_cached_tsid = 0;
var->var_cached_tsver = 0;
- if (_PyObject_GC_IS_TRACKED(name) ||
- (def != NULL && _PyObject_GC_IS_TRACKED(def)))
+ if (_PyObject_GC_MAY_BE_TRACKED(name) ||
+ (def != NULL && _PyObject_GC_MAY_BE_TRACKED(def)))
{
PyObject_GC_Track(var);
}
diff --git a/Python/hamt.c b/Python/hamt.c
index df3b1092cb..79c42c0f43 100644
--- a/Python/hamt.c
+++ b/Python/hamt.c
@@ -449,7 +449,7 @@ hamt_bitcount(uint32_t i)
*/
i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
- return ((i + (i >> 4) & 0xF0F0F0F) * 0x1010101) >> 24;
+ return (((i + (i >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
}
static inline uint32_t