need help checking for stack overflow in Win32
MHammond at skippinet.com.au
Wed Jun 2 01:13:30 CEST 1999
Actually, I was about to post this yesterday, and to prove my point I wrote:
Expecting to see the crash. I was then going to go into a rant about how
win32api.Apply would actually let you catch this (and any other Win32)
exception as a temporary solution.
But it worked correctly - ie, Python raised a RuntimeError: Max Recursion.
So I guessed that 1.5.2 had fixed this, presumably by reducing the recursion
count for Win32. Apparently not!
Thomas' reply is correct, and indeed a number of years ago I did play with
this. I even reported my results, but no one seemed interested, so I
dropped it (waiting for someone else to complain :-)
It still seems to me that this is not the ideal good solution. In my simple
example above, we did not die. But make anything less contrived, and we
have C frames with larger allocations on the stack, and we will die.
Whatever number we pick, we would need to make it quite a bit lower than the
"normal" case, to handle the fact that some C functions may allocate from
bytes to kilobytes on the stack.
A better mechanism would be to use Win32 exception handlers. Then you dont
need artificial recursion checks at all - leave it to the OS. However, it
isnt clear to me where this exception handler should be placed, nor indeed
if setting up a Win32 exception handler inside the VM would have a
significant performance hit. A plus would be we could also catch Access
Violations (Im not sure what we would do with them - but a traceback would
be nicer than Dr Watson when dealing with buggy extensions!)
Thomas' solution is simple, and requires either a simple source file change,
or using the MSVC GUI to adjust the stack size. If you would like to
experiment with a Win32 exception handler then I would be happy to see where
that leads us...
Guido van Rossum wrote in message <5lk8to3su3.fsf at eric.cnri.reston.va.us>...
>I could use some help from someone with a little time, some knowledge
>of Python internals, and some Win32 C expertise. On Win32 platforms,
>infinite recursion causes an Application Error (a fatal windows
>error). There is some machinery in Python to check for this
>condition, but apparently it doesn't work on Win32. Please help!
>--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-list