Skip to content

Commit 926a02e

Browse files
committed
Revert pre-size and empty fast path in lazy modules snapshot
Drop _PyDict_NewPresized and the empty-registry short-circuit. Both were micro-optimizations with negligible impact for typical registry sizes; the simpler unconditional PyDict_New + iterate path is easier to read.
1 parent a94f4e7 commit 926a02e

1 file changed

Lines changed: 17 additions & 27 deletions

File tree

Python/import.c

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -290,44 +290,34 @@ _PyImport_GetLazyModulesSnapshot(PyInterpreterState *interp)
290290
return PyFrozenDict_New(NULL);
291291
}
292292

293-
PyObject *tmp = NULL;
294-
int err = 0;
293+
PyObject *tmp = PyDict_New();
294+
if (tmp == NULL) {
295+
return NULL;
296+
}
295297

298+
int err = 0;
296299
Py_BEGIN_CRITICAL_SECTION(lazy_modules);
297-
Py_ssize_t size = PyDict_GET_SIZE(lazy_modules);
298-
if (size > 0) {
299-
tmp = _PyDict_NewPresized(size);
300-
if (tmp == NULL) {
300+
Py_ssize_t pos = 0;
301+
PyObject *key, *value;
302+
while (PyDict_Next(lazy_modules, &pos, &key, &value)) {
303+
PyObject *frozen = PyFrozenSet_New(value);
304+
if (frozen == NULL) {
301305
err = -1;
306+
break;
302307
}
303-
else {
304-
Py_ssize_t pos = 0;
305-
PyObject *key, *value;
306-
while (PyDict_Next(lazy_modules, &pos, &key, &value)) {
307-
PyObject *frozen = PyFrozenSet_New(value);
308-
if (frozen == NULL) {
309-
err = -1;
310-
break;
311-
}
312-
if (PyDict_SetItem(tmp, key, frozen) < 0) {
313-
Py_DECREF(frozen);
314-
err = -1;
315-
break;
316-
}
317-
Py_DECREF(frozen);
318-
}
308+
if (PyDict_SetItem(tmp, key, frozen) < 0) {
309+
Py_DECREF(frozen);
310+
err = -1;
311+
break;
319312
}
313+
Py_DECREF(frozen);
320314
}
321315
Py_END_CRITICAL_SECTION();
322316

323317
if (err < 0) {
324-
Py_XDECREF(tmp);
318+
Py_DECREF(tmp);
325319
return NULL;
326320
}
327-
if (tmp == NULL) {
328-
// Registry is empty.
329-
return PyFrozenDict_New(NULL);
330-
}
331321

332322
PyObject *snapshot = PyFrozenDict_New(tmp);
333323
Py_DECREF(tmp);

0 commit comments

Comments
 (0)