From 4e08c32a85a1cb0b9105fa6a3afbc9a8ad17d0dc Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 25 Jan 2018 13:36:34 -0500 Subject: [PATCH] bpo-32436: Fix a refleak; var GC tracking; a GCC warning 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. --- Python/context.c | 8 +++++--- Python/hamt.c | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Python/context.c b/Python/context.c index 5439531cd1e2f7..d90ed25c4d4068 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 df3b1092cbe58c..79c42c0f43346e 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