summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2018-04-26 00:28:14 (GMT)
committerGitHub <noreply@github.com>2018-04-26 00:28:14 (GMT)
commit55299fffe328c3d2dfc222a22116b7e53bf2e962 (patch)
tree253d6415621887b9b60114e68c579f8aad4661ae /Python
parent730fb07c3c5f3e11be9d35efa71027229072778f (diff)
downloadcpython-55299fffe328c3d2dfc222a22116b7e53bf2e962.zip
cpython-55299fffe328c3d2dfc222a22116b7e53bf2e962.tar.gz
cpython-55299fffe328c3d2dfc222a22116b7e53bf2e962.tar.bz2
[2.7] bpo-33330: Improve error handling in PyImport_Cleanup(). (GH-6564). (GH-6605)
(cherry picked from commit e9d9494d6b2a5e0c2d48d22c7f0d5e95504b4f7e)
Diffstat (limited to 'Python')
-rw-r--r--Python/import.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/Python/import.c b/Python/import.c
index 1d74faf..f43a47c 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -447,7 +447,9 @@ PyImport_Cleanup(void)
dict = PyModule_GetDict(value);
if (Py_VerboseFlag)
PySys_WriteStderr("# clear __builtin__._\n");
- PyDict_SetItemString(dict, "_", Py_None);
+ if (PyDict_SetItemString(dict, "_", Py_None) < 0) {
+ PyErr_Clear();
+ }
}
value = PyDict_GetItemString(modules, "sys");
if (value != NULL && PyModule_Check(value)) {
@@ -457,7 +459,9 @@ PyImport_Cleanup(void)
for (p = sys_deletes; *p != NULL; p++) {
if (Py_VerboseFlag)
PySys_WriteStderr("# clear sys.%s\n", *p);
- PyDict_SetItemString(dict, *p, Py_None);
+ if (PyDict_SetItemString(dict, *p, Py_None) < 0) {
+ PyErr_Clear();
+ }
}
for (p = sys_files; *p != NULL; p+=2) {
if (Py_VerboseFlag)
@@ -465,7 +469,9 @@ PyImport_Cleanup(void)
v = PyDict_GetItemString(dict, *(p+1));
if (v == NULL)
v = Py_None;
- PyDict_SetItemString(dict, *p, v);
+ if (PyDict_SetItemString(dict, *p, v) < 0) {
+ PyErr_Clear();
+ }
}
}
@@ -475,7 +481,9 @@ PyImport_Cleanup(void)
if (Py_VerboseFlag)
PySys_WriteStderr("# cleanup __main__\n");
_PyModule_Clear(value);
- PyDict_SetItemString(modules, "__main__", Py_None);
+ if (PyDict_SetItemString(modules, "__main__", Py_None) < 0) {
+ PyErr_Clear();
+ }
}
/* The special treatment of __builtin__ here is because even
@@ -510,10 +518,15 @@ PyImport_Cleanup(void)
PySys_WriteStderr(
"# cleanup[1] %s\n", name);
_PyModule_Clear(value);
- PyDict_SetItem(modules, key, Py_None);
+ if (PyDict_SetItem(modules, key, Py_None) < 0) {
+ PyErr_Clear();
+ }
ndone++;
}
}
+ if (PyErr_Occurred()) {
+ PyErr_Clear();
+ }
} while (ndone > 0);
/* Next, delete all modules (still skipping __builtin__ and sys) */
@@ -528,7 +541,12 @@ PyImport_Cleanup(void)
if (Py_VerboseFlag)
PySys_WriteStderr("# cleanup[2] %s\n", name);
_PyModule_Clear(value);
- PyDict_SetItem(modules, key, Py_None);
+ if (PyDict_SetItem(modules, key, Py_None) < 0) {
+ PyErr_Clear();
+ }
+ }
+ if (PyErr_Occurred()) {
+ PyErr_Clear();
}
}
@@ -538,14 +556,18 @@ PyImport_Cleanup(void)
if (Py_VerboseFlag)
PySys_WriteStderr("# cleanup sys\n");
_PyModule_Clear(value);
- PyDict_SetItemString(modules, "sys", Py_None);
+ if (PyDict_SetItemString(modules, "sys", Py_None) < 0) {
+ PyErr_Clear();
+ }
}
value = PyDict_GetItemString(modules, "__builtin__");
if (value != NULL && PyModule_Check(value)) {
if (Py_VerboseFlag)
PySys_WriteStderr("# cleanup __builtin__\n");
_PyModule_Clear(value);
- PyDict_SetItemString(modules, "__builtin__", Py_None);
+ if (PyDict_SetItemString(modules, "__builtin__", Py_None) < 0) {
+ PyErr_Clear();
+ }
}
/* Finally, clear and delete the modules directory */