From 6ab62920c87930dedc31fe633ecda3e51d3d7503 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 25 Jan 2018 14:18:55 -0500 Subject: 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. --- 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 5439531..d90ed25 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 df3b109..79c42c0 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 -- cgit v0.12