[Python-checkins] r46894 - in python/trunk: Modules/timemodule.c Objects/exceptions.c Objects/fileobject.c

Tim Peters tim.peters at gmail.com
Fri Jun 30 20:37:51 CEST 2006


Copying Kristján directly since he may not be subscribed to python-checkins.

On 6/30/06, Thomas Heller <theller at python.net> wrote:
> kristjan.jonsson schrieb:
> > Author: kristjan.jonsson
> > Date: Mon Jun 12 17:45:12 2006
> > New Revision: 46894
> >
> > Modified:
> >    python/trunk/Modules/timemodule.c
> >    python/trunk/Objects/exceptions.c
> >    python/trunk/Objects/fileobject.c
> > Log:
> > Fix the CRT argument error handling for VisualStudio .NET 2005.  Install a CRT error handler and disable the assertion for debug builds.  This causes CRT to set errno to EINVAL.
> > This update fixes crash cases in the test suite where the default CRT error handler would cause process exit.
> ...
> > Modified: python/trunk/Objects/exceptions.c
> > ==============================================================================
> > --- python/trunk/Objects/exceptions.c (original)
> > +++ python/trunk/Objects/exceptions.c Mon Jun 12 17:45:12 2006
> > @@ -1967,6 +1967,29 @@
> >      if (PyDict_SetItemString(bdict, # TYPE, PyExc_ ## TYPE)) \
> >          Py_FatalError("Module dictionary insertion problem.");
> >
> > +#if defined _MSC_VER && _MSC_VER >= 1400
> > +/* crt variable checking in VisualStudio .NET 2005 */
> > +#include <crtdbg.h>
> > +
> > +static int   prevCrtReportMode;
> > +static _invalid_parameter_handler    prevCrtHandler;
> > +
> > +/* Invalid parameter handler.  Sets a ValueError exception */
> > +static void
> > +InvalidParameterHandler(
> > +    const wchar_t * expression,
> > +    const wchar_t * function,
> > +    const wchar_t * file,
> > +    unsigned int line,
> > +    uintptr_t pReserved)
> > +{
> > +    /* Do nothing, allow execution to continue.  Usually this
> > +     * means that the CRT will set errno to EINVAL
> > +     */
> > +}
> > +#endif
> > +
> > +
> >  PyMODINIT_FUNC
> >  _PyExc_Init(void)
> >  {
> > @@ -2096,6 +2119,13 @@
> >          Py_FatalError("Cannot pre-allocate MemoryError instance\n");
> >
> >      Py_DECREF(bltinmod);
> > +
> > +#if defined _MSC_VER && _MSC_VER >= 1400
> > +    /* Set CRT argument error handler */
> > +    prevCrtHandler = _set_invalid_parameter_handler(InvalidParameterHandler);
> > +    /* turn off assertions in debug mode */
> > +    prevCrtReportMode = _CrtSetReportMode(_CRT_ASSERT, 0);
> > +#endif
> >  }
> >
> >  void
> > @@ -2103,4 +2133,9 @@
> >  {
> >      Py_XDECREF(PyExc_MemoryErrorInst);
> >      PyExc_MemoryErrorInst = NULL;
> > +#if defined _MSC_VER && _MSC_VER >= 1400
> > +    /* reset CRT error handling */
> > +    _set_invalid_parameter_handler(prevCrtHandler);
> > +    _CrtSetReportMode(_CRT_ASSERT, prevCrtReportMode);
> > +#endif
> >  }
> ...
>
> These changes to Objects/exceptions.c break the build for Windows AMD64.  Apparently the amd64
> compiler from the Server 2003 SP1 SDK has _MSC_VER >= 1400, but does not know about this new
> error handling.
>
> The compiler identifies itself in this way:
>
> C:\Program Files\Microsoft Platform SDK>cl
> Microsoft (R) C/C++ Optimizing Compiler Version 14.00.40310.41 for AMD64
> Copyright (C) Microsoft Corporation.  All rights reserved.
>
> usage: cl [ option... ] filename... [ /link linkoption... ]
>
> C:\Program Files\Microsoft Platform SDK>
>
>
> Thomas
>
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
>


More information about the Python-checkins mailing list