[Python-checkins] r46894 - in python/trunk: Modules/timemodule.c Objects/exceptions.c Objects/fileobject.c
Thomas Heller
theller at python.net
Fri Jun 30 20:09:52 CEST 2006
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
More information about the Python-checkins
mailing list