summaryrefslogtreecommitdiff
path: root/Python/pythonrun.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2010-03-10 22:30:19 +0000
committerVictor Stinner <victor.stinner@haypocalc.com>2010-03-10 22:30:19 +0000
commit6664426d7cdb63b88d973a731cc442ecba10047a (patch)
tree7c809077569e93086eb42e1e29eea8fb5c6eb582 /Python/pythonrun.c
parente9e07bf5c988bdfe4158d3ac14b25312430f1bd0 (diff)
downloadcpython-git-6664426d7cdb63b88d973a731cc442ecba10047a.tar.gz
Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
(SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module.
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r--Python/pythonrun.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 4f8417a31f..ada1481ca1 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -248,14 +248,15 @@ Py_InitializeEx(int install_sigs)
}
initmain(); /* Module __main__ */
- if (!Py_NoSiteFlag)
- initsite(); /* Module site */
/* auto-thread-state API, if available */
#ifdef WITH_THREAD
_PyGILState_Init(interp, tstate);
#endif /* WITH_THREAD */
+ if (!Py_NoSiteFlag)
+ initsite(); /* Module site */
+
if ((p = Py_GETENV("PYTHONIOENCODING")) && *p != '\0') {
p = icodeset = codeset = strdup(p);
free_codeset = 1;
@@ -284,8 +285,13 @@ Py_InitializeEx(int install_sigs)
loc_codeset = strdup(loc_codeset);
Py_DECREF(enc);
} else {
- loc_codeset = NULL;
- PyErr_Clear();
+ if (PyErr_ExceptionMatches(PyExc_LookupError)) {
+ PyErr_Clear();
+ loc_codeset = NULL;
+ } else {
+ PyErr_Print();
+ exit(1);
+ }
}
} else
loc_codeset = NULL;
@@ -704,20 +710,12 @@ initmain(void)
static void
initsite(void)
{
- PyObject *m, *f;
+ PyObject *m;
m = PyImport_ImportModule("site");
if (m == NULL) {
- f = PySys_GetObject("stderr");
- if (Py_VerboseFlag) {
- PyFile_WriteString(
- "'import site' failed; traceback:\n", f);
- PyErr_Print();
- }
- else {
- PyFile_WriteString(
- "'import site' failed; use -v for traceback\n", f);
- PyErr_Clear();
- }
+ PyErr_Print();
+ Py_Finalize();
+ exit(1);
}
else {
Py_DECREF(m);
@@ -1546,6 +1544,8 @@ err_input(perrdetail *err)
char *msg = NULL;
errtype = PyExc_SyntaxError;
switch (err->error) {
+ case E_ERROR:
+ return;
case E_SYNTAX:
errtype = PyExc_IndentationError;
if (err->expected == INDENT)