assert(orig->ma_keys != Py_EMPTY_KEYS);
assert(orig->ma_keys->dk_refcnt == 1);
- ASSERT_DICT_LOCKED(orig);
+ if (!PyFrozenDict_Check(orig)) {
+ ASSERT_DICT_LOCKED(orig);
+ }
size_t keys_size = _PyDict_KeysSize(orig->ma_keys);
PyDictKeysObject *keys = PyMem_Malloc(keys_size);
PyObject *copy;
PyDictObject *mp;
- ASSERT_DICT_LOCKED(o);
+ // frozendict is immutable and so doesn't need critical section
+ if (!PyFrozenDict_Check(o)) {
+ ASSERT_DICT_LOCKED(o);
+ }
mp = (PyDictObject *)o;
if (mp->ma_used == 0) {
assert(PyAnyDict_Check(o));
PyObject *res;
- Py_BEGIN_CRITICAL_SECTION(o);
- res = copy_lock_held(o, PyFrozenDict_Check(o));
- Py_END_CRITICAL_SECTION();
+ if (PyFrozenDict_Check(o)) {
+ res = copy_lock_held(o, 1);
+ }
+ else {
+ Py_BEGIN_CRITICAL_SECTION(o);
+ res = copy_lock_held(o, 0);
+ Py_END_CRITICAL_SECTION();
+ }
return res;
}
assert(PyAnyDict_Check(o));
PyObject *res;
- Py_BEGIN_CRITICAL_SECTION(o);
- res = copy_lock_held(o, 0);
- Py_END_CRITICAL_SECTION();
+ if (PyFrozenDict_Check(o)) {
+ res = copy_lock_held(o, 0);
+ }
+ else {
+ Py_BEGIN_CRITICAL_SECTION(o);
+ res = copy_lock_held(o, 0);
+ Py_END_CRITICAL_SECTION();
+ }
return res;
}