contextvars.Context(a=1)
contextvars.Context(**{})
+ def test_context_new_unhashable_str_subclass(self):
+ # gh-132002: it used to crash on unhashable str subtypes.
+ class weird_str(str):
+ def __eq__(self, other):
+ pass
+
+ with self.assertRaisesRegex(TypeError, 'unhashable type'):
+ contextvars.ContextVar(weird_str())
+
def test_context_typerrors_1(self):
ctx = contextvars.Context()
return NULL;
}
- var->var_hash = contextvar_generate_hash(var, name);
- if (var->var_hash == -1) {
- Py_DECREF(var);
- return NULL;
- }
-
var->var_name = Py_NewRef(name);
-
var->var_default = Py_XNewRef(def);
var->var_cached = NULL;
var->var_cached_tsid = 0;
var->var_cached_tsver = 0;
+ var->var_hash = contextvar_generate_hash(var, name);
+ if (var->var_hash == -1) {
+ Py_DECREF(var);
+ return NULL;
+ }
+
if (_PyObject_GC_MAY_BE_TRACKED(name) ||
(def != NULL && _PyObject_GC_MAY_BE_TRACKED(def)))
{