Skip to content

Commit 6c9bd47

Browse files
Factor out fix_up_extension().
1 parent 914f8fd commit 6c9bd47

File tree

1 file changed

+29
-10
lines changed

1 file changed

+29
-10
lines changed

Python/import.c

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -489,9 +489,8 @@ _extensions_cache_clear(void)
489489
Py_CLEAR(_PyRuntime.imports.extensions);
490490
}
491491

492-
int
493-
_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
494-
PyObject *filename, PyObject *modules)
492+
static int
493+
fix_up_extension(PyObject *mod, PyObject *name, PyObject *filename)
495494
{
496495
if (mod == NULL || !PyModule_Check(mod)) {
497496
PyErr_BadInternalCall();
@@ -505,11 +504,7 @@ _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
505504
}
506505

507506
PyThreadState *tstate = _PyThreadState_GET();
508-
if (PyObject_SetItem(modules, name, mod) < 0) {
509-
return -1;
510-
}
511507
if (_PyState_AddModule(tstate, mod, def) < 0) {
512-
PyMapping_DelItem(modules, name);
513508
return -1;
514509
}
515510

@@ -541,15 +536,39 @@ _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
541536
return 0;
542537
}
543538

539+
int
540+
_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
541+
PyObject *filename, PyObject *modules)
542+
{
543+
if (PyObject_SetItem(modules, name, mod) < 0) {
544+
return -1;
545+
}
546+
if (fix_up_extension(mod, name, filename) < 0) {
547+
PyMapping_DelItem(modules, name);
548+
return -1;
549+
}
550+
return 0;
551+
}
552+
544553
int
545554
_PyImport_FixupBuiltin(PyObject *mod, const char *name, PyObject *modules)
546555
{
547-
int res;
556+
int res = -1;
548557
PyObject *nameobj;
549558
nameobj = PyUnicode_InternFromString(name);
550-
if (nameobj == NULL)
559+
if (nameobj == NULL) {
551560
return -1;
552-
res = _PyImport_FixupExtensionObject(mod, nameobj, nameobj, modules);
561+
}
562+
if (PyObject_SetItem(modules, nameobj, mod) < 0) {
563+
goto finally;
564+
}
565+
if (fix_up_extension(mod, nameobj, nameobj) < 0) {
566+
PyMapping_DelItem(modules, nameobj);
567+
goto finally;
568+
}
569+
res = 0;
570+
571+
finally:
553572
Py_DECREF(nameobj);
554573
return res;
555574
}

0 commit comments

Comments
 (0)