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.
This commit is contained in:
Yury Selivanov 2018-01-25 14:18:55 -05:00 committed by GitHub
parent b31206a223
commit 6ab62920c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 4 deletions

View File

@ -134,7 +134,9 @@ PyContextVar_New(const char *name, PyObject *def)
if (pyname == NULL) { if (pyname == NULL) {
return 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_tsid = 0;
var->var_cached_tsver = 0; var->var_cached_tsver = 0;
if (_PyObject_GC_IS_TRACKED(name) || if (_PyObject_GC_MAY_BE_TRACKED(name) ||
(def != NULL && _PyObject_GC_IS_TRACKED(def))) (def != NULL && _PyObject_GC_MAY_BE_TRACKED(def)))
{ {
PyObject_GC_Track(var); PyObject_GC_Track(var);
} }

View File

@ -449,7 +449,7 @@ hamt_bitcount(uint32_t i)
*/ */
i = i - ((i >> 1) & 0x55555555); i = i - ((i >> 1) & 0x55555555);
i = (i & 0x33333333) + ((i >> 2) & 0x33333333); i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
return ((i + (i >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; return (((i + (i >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
} }
static inline uint32_t static inline uint32_t