[Python-checkins] r78826 - in python/trunk: Lib/site.py Misc/NEWS Modules/main.c Parser/tokenizer.c Python/import.c Python/pythonrun.c
Brett Cannon
brett at python.org
Thu Mar 11 21:55:28 CET 2010
Are you planning to forward-port this to py3k, Victor?
On Wed, Mar 10, 2010 at 14:30, victor.stinner <python-checkins at python.org>wrote:
> Author: victor.stinner
> Date: Wed Mar 10 23:30:19 2010
> New Revision: 78826
>
> Log:
> 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.
>
>
> Modified:
> python/trunk/Lib/site.py
> python/trunk/Misc/NEWS
> python/trunk/Modules/main.c
> python/trunk/Parser/tokenizer.c
> python/trunk/Python/import.c
> python/trunk/Python/pythonrun.c
>
> Modified: python/trunk/Lib/site.py
>
> ==============================================================================
> --- python/trunk/Lib/site.py (original)
> +++ python/trunk/Lib/site.py Wed Mar 10 23:30:19 2010
> @@ -489,6 +489,12 @@
> import sitecustomize
> except ImportError:
> pass
> + except Exception:
> + if sys.flags.verbose:
> + sys.excepthook(*sys.exc_info())
> + else:
> + print >>sys.stderr, \
> + "'import sitecustomize' failed; use -v for traceback"
>
>
> def execusercustomize():
> @@ -497,6 +503,12 @@
> import usercustomize
> except ImportError:
> pass
> + except Exception:
> + if sys.flags.verbose:
> + sys.excepthook(*sys.exc_info())
> + else:
> + print>>sys.stderr, \
> + "'import sitecustomize' failed; use -v for traceback"
>
>
> def main():
>
> Modified: python/trunk/Misc/NEWS
>
> ==============================================================================
> --- python/trunk/Misc/NEWS (original)
> +++ python/trunk/Misc/NEWS Wed Mar 10 23:30:19 2010
> @@ -12,6 +12,11 @@
> Core and Builtins
> -----------------
>
> +- 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.
> +
> Library
> -------
>
>
> Modified: python/trunk/Modules/main.c
>
> ==============================================================================
> --- python/trunk/Modules/main.c (original)
> +++ python/trunk/Modules/main.c Wed Mar 10 23:30:19 2010
> @@ -573,10 +573,16 @@
> }
>
> if (sts==-1) {
> - sts = PyRun_AnyFileExFlags(
> - fp,
> - filename == NULL ? "<stdin>" : filename,
> - filename != NULL, &cf) != 0;
> + /* call pending calls like signal handlers (SIGINT)
> */
> + if (Py_MakePendingCalls() == -1) {
> + PyErr_Print();
> + sts = 1;
> + } else {
> + sts = PyRun_AnyFileExFlags(
> + fp,
> + filename == NULL ? "<stdin>" :
> filename,
> + filename != NULL, &cf) != 0;
> + }
> }
>
> }
>
> Modified: python/trunk/Parser/tokenizer.c
>
> ==============================================================================
> --- python/trunk/Parser/tokenizer.c (original)
> +++ python/trunk/Parser/tokenizer.c Wed Mar 10 23:30:19 2010
> @@ -817,8 +817,12 @@
> return -1;
>
> error_clear:
> - /* Fallback to iso-8859-1: for backward compatibility */
> Py_DECREF(enc);
> + if (!PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) {
> + tok->done = E_ERROR;
> + return -1;
> + }
> + /* Fallback to iso-8859-1: for backward compatibility */
> PyErr_Clear();
> return 0;
> }
>
> Modified: python/trunk/Python/import.c
>
> ==============================================================================
> --- python/trunk/Python/import.c (original)
> +++ python/trunk/Python/import.c Wed Mar 10 23:30:19 2010
> @@ -2748,8 +2748,6 @@
> }
> else {
> /* No globals -- use standard builtins, and fake globals */
> - PyErr_Clear();
> -
> builtins = PyImport_ImportModuleLevel("__builtin__",
> NULL, NULL, NULL, 0);
> if (builtins == NULL)
>
> Modified: python/trunk/Python/pythonrun.c
>
> ==============================================================================
> --- python/trunk/Python/pythonrun.c (original)
> +++ python/trunk/Python/pythonrun.c Wed Mar 10 23:30:19 2010
> @@ -248,14 +248,15 @@
> }
>
> 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 @@
> 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 @@
> 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 @@
> char *msg = NULL;
> errtype = PyExc_SyntaxError;
> switch (err->error) {
> + case E_ERROR:
> + return;
> case E_SYNTAX:
> errtype = PyExc_IndentationError;
> if (err->expected == INDENT)
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-checkins/attachments/20100311/9c532306/attachment-0001.html>
More information about the Python-checkins
mailing list