Stack overflow when initializing video subsystem

Hello,

I get a stack overflow when initializing the video subsystem (when
OpenGL is enabled)
SDL works just fine when I let it run it it’s own window, but what I’m
trying to do now is to embed it into a widget of my application. I can
disable OpenGL, then I can run SDL applications that use only 2D
without any problems.

Some more information about the system I’m using:
I’m using windows server 2003. SDL Version: 1.2.11. The problem also
happens for other people on other machines (specifically: machine
running windows vista).
I use the Eiffel Language Binding (http://eiffelmedia.origo.ethz.ch).
I’m trying to embed it into a Vision2 widget
(http://docs.eiffel.com/eiffelstudio/libraries/vision2/00_introduction.html),
which is just a wrapper for the native windows widgets.

The stack overflow happens when I call SDL_SetVideoMode, and sometime
later WinMessage calls DIB_HandleMessage which then goes back to
WinMessage and so on.

I’ll try to be more specific on where the overflow occurs:

I call SDL_SetVideoMode (here I fill in the values that are used in the call)
SDL_SetVideoMode (640, 480, 32, 0x00000002)
The crash also occured when I played around with the flags, just as
soon as I enable OpenGL it crashes.

What happens then is:
SDL_SetVideoMode -> DIB_SetVideoMode -> WIN_GL_SetupWindow ->
Init_WGL_ARB_extensions -> [some calls in user32.dll, ntdll.dll,
kernel32.dll] -> WinMessage.

That’s where the problems start:
WinMessage (from sdl_sysevents.c) gets called with msg=0x00000081.
This message seems to be unknown, so the function HandleMessage gets
called. This calls DIB_HandleMessage (sdl_dibevents.c), which also
doesn’t know the message code, and calls CallWindowProc again - which,
after some calls in user32.dll and so on, returns to WinMessage. So I
get a stack overflow because WinMessage calls DIB_HandleMessage which
then goes back to WinMessage.

I have attached the stack trace.

What I’ve tried is modifying sdl_dibevents.c to protect the function
from being called recursively. Then my application starts, but I only
see a black screen (when OpenGL is enabled, 2D works fine with this
hack).

Any ideas on what could be wrong here, where I could look for problems
or how to give you more information to help me would be greatly
appreciated.

Regards,
Urs
-------------- next part --------------
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4a66c) Line 253 C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4a66c) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4aca8) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4aca8) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4b2e4) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4b2e4) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4b920) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4b920) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4bf5c) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4bf5c) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4c598) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4c598) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4cbd4) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4cbd4) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4d210) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4d210) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4d84c) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4d84c) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4de88) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4de88) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
ntdll.dll!7c830798()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4e4c4) Line 253 + 0x1d bytes C

SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4e4c4) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
ntdll.dll!7c8302e7()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c833139()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x04bf2fc0, HWND
_ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4eb00) Line 253 + 0x1d bytes C
SDL.dll!WinMessage(HWND__ * hwnd=0x00080bfe, unsigned int msg=0x00000081, unsigned int wParam=0x00000000, long lParam=0x06a4eb00) Line 722 + 0x1d bytes C
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!77395589()
vision.exe!cwel_window_procedure at 16() + 0x5c bytes
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!7739ca95()
user32.dll!773a9b49()
user32.dll!773ad03f()
SDL.dll!DIB_HandleMessage(SDL_VideoDevice * this=0x7c833498, HWND
_ * hwnd=0x06a4efcc, unsigned int msg=0x10081dd7, unsigned int wParam=0x04bf2fc0, long lParam=0x00080bfe) Line 253 + 0x1d bytes C
ntdll.dll!7c833488()
ntdll.dll!7c8302e7()
ntdll.dll!7c82fadf()
ntdll.dll!7c82fb23()
ntdll.dll!7c83aa25()
ntdll.dll!7c833498()
ntdll.dll!7c833637()
ntdll.dll!7c83375b()
ntdll.dll!7c83368f()
user32.dll!7739c3b7()
user32.dll!7739c484()
user32.dll!7739c43a()
ntdll.dll!7c82f9c1()
user32.dll!7739ca68()
user32.dll!773948bf()
ntdll.dll!7c82ec9e()
user32.dll!77394855()
user32.dll!77391439()
ntdll.dll!7c832b7f()
ntdll.dll!7c833f60()
ntdll.dll!7c833f28()
kernel32.dll!77e63028()
kernel32.dll!77e41d93()
ntdll.dll!7c8300c6()
ntdll.dll!7c82f9dd()
ntdll.dll!7c82f5a0()
ntdll.dll!7c831fb2()
ntdll.dll!7c831fb2()
ntdll.dll!7c831fe4()
user32.dll!77394a07()
user32.dll!7738e988()
SDL.dll!Init_WGL_ARB_extensions(SDL_VideoDevice * this=0x04bf2fc0) Line 123 + 0x2f bytes C
SDL.dll!WIN_GL_SetupWindow(SDL_VideoDevice * this=0x04bf2fc0) Line 227 + 0x9 bytes C
SDL.dll!DIB_SetVideoMode(SDL_VideoDevice * this=0x04bf2fc0, SDL_Surface * current=0x04bf3538, int width=0x00000280, int height=0x000001e0, int bpp=0x00000020, unsigned int flags=0x00000002) Line 820 + 0x9 bytes C
SDL.dll!SDL_SetVideoMode(int width=0x00000280, int height=0x000001e0, int bpp=0x00000020, unsigned int flags=0x00000002) Line 667 + 0x20 bytes C
vision.exe!Fjvhflq(char * Current=0x04ca8f48, int arg1=0x00000280, int arg2=0x000001e0, int arg3=0x00000020, int arg4=0x60000002) Line 915 + 0x15 bytes C
vision.exe!Fl3m41i(char * Current=0x04ca8f48) Line 216 + 0x2c bytes C
vision.exe!toc6(char * (char , ) ptr=0x015a6ea0) Line 509 + 0x7 bytes C
vision.exe!_dynamic_eval() + 0x4da bytes
vision.exe!_xinitint() + 0x407b bytes
vision.exe!_xinterp() + 0x174 bytes
vision.exe!toi6(char * Current=0x04ca7338) Line 500 + 0xf bytes C
vision.exe!_fAahk17l(void (char ) f_ptr=0x00000000, EIF_TYPED_ELEMENT * closed=0x04ca88b8, EIF_TYPED_ELEMENT * open=0x00000000) Line 1364 + 0x27 bytes C
vision.exe!inline_Fmrmqcp(void * arg1=0x00405e25, void * arg2=0x00000000, void * arg3=0x04ca88b8, void * arg4=0x00000000, int arg5=0x000003e9, int arg6=0x000001a1, unsigned char arg7=0x00, unsigned char arg8=0x00, unsigned char arg9=0x00, int arg10=0x00000001, int arg11=0x00000000, void * arg12=0x00000000) Line 35 + 0xf bytes C
vision.exe!Fmrmqcp(char * Current=0x04ca88e8, void * arg1=0x00405e25, void * arg2=0x00000000, void * arg3=0x04ca88b8, void * arg4=0x00000000, int arg5=0x000003e9, int arg6=0x000001a1, unsigned char arg7=0x00, unsigned char arg8=0x00, unsigned char arg9=0x00, int arg10=0x00000001, int arg11=0x00000000, void * arg12=0x00000000) Line 169 + 0x35 bytes C
vision.exe!Fmrl2e2(char * Current=0x04ca88e8, char * arg1=0x00000000) Line 131 + 0x49 bytes C
vision.exe!Fa28f90(char * Current=0x04ca8e60) Line 107 + 0x22 bytes C
vision.exe!Fa24kn9(char * Current=0x04ca8e60) Line 173 + 0x19 bytes C
vision.exe!fAaa2eh4(char * Current=0x04ca8e60) Line 1482 + 0x1e bytes C
vision.exe!_eif_thr_create_with_args() + 0x74d bytes
vision.exe!_callthreadstart() Line 293 + 0x6 bytes C
vision.exe!_threadstart(void * ptd=0x052eb850) Line 275 + 0x5 bytes C
kernel32.dll!77e6608b()

That’s where the problems start:
WinMessage (from sdl_sysevents.c) gets called with msg=0x00000081.
This message seems to be unknown, so the function HandleMessage gets
called. This calls DIB_HandleMessage (sdl_dibevents.c), which also
doesn’t know the message code, and calls CallWindowProc again - which,
after some calls in user32.dll and so on, returns to WinMessage. So I
get a stack overflow because WinMessage calls DIB_HandleMessage which
then goes back to WinMessage.

0x81 is WM_NCCREATE, and it’s a standard message, so everyone using SDL
would be hosed with infinite recursion if there wasn’t some other issue.

CallWindowProc() is only used if there’s a window specified via
SDL_WINDOWID environment variable hack…and it would cause bad, bad
things to happen if that ID matched the SDL window itself somehow.

SDL will query for the SDL_WINDOWID window’s event handling procedure
and call it…and SDL won’t destroy an SDL_WINDOWID window in SDL_Quit()
or a second call to SDL_SetVideoMode().

So here’s my hypothesis:

  1. App is calling SDL_Init() and SDL_SetVideoMode().
  2. App is then setting SDL_WINDOWID environment variable to the ID of
    the SDL_SetVideoMode() window.
  3. App is then reinitializing window with a second call to
    SDL_SetVideoMode()…maybe a resize event or something.
  4. SDL doesn’t destroy the original window created by the first
    SDL_SetVideoMode, since it sees SDL_WINDOWID.
  5. When SDL is supposed to create a new one, it reuses the old and
    queries for its win32 event handler, which is the usual SDL win32 event
    handler.
  6. Window gets an event, passes through SDL, passes to the original
    event handler, which is SDL, so it passes through again, again, again,
    until stack overflows.

I’m a little foggy on the details of exactly how this scenario happens
in part #4, but I think that’s roughly what’s happening. I don’t think
this is an SDL bug in this case. Let me know if this info points you to
anything in your app, though, and we’ll go forward from there.

–ryan.

Thanks for your answer.
I did play around with SDL_WINDOWID, in particular I did not set it
before I set the video mode. With that the application starts (with
SDL in a seperate window), but I only see a black screen when using
OpenGL (it works on someone else’s computer though).

I’ll keep looking what I find out about that matter, I’ll let you know
if I have any more information, problems or solutions.

Regards,
UrsOn 3/29/07, Ryan C. Gordon wrote:

That’s where the problems start:
WinMessage (from sdl_sysevents.c) gets called with msg=0x00000081.
This message seems to be unknown, so the function HandleMessage gets
called. This calls DIB_HandleMessage (sdl_dibevents.c), which also
doesn’t know the message code, and calls CallWindowProc again - which,
after some calls in user32.dll and so on, returns to WinMessage. So I
get a stack overflow because WinMessage calls DIB_HandleMessage which
then goes back to WinMessage.

0x81 is WM_NCCREATE, and it’s a standard message, so everyone using SDL
would be hosed with infinite recursion if there wasn’t some other issue.

CallWindowProc() is only used if there’s a window specified via
SDL_WINDOWID environment variable hack…and it would cause bad, bad
things to happen if that ID matched the SDL window itself somehow.

SDL will query for the SDL_WINDOWID window’s event handling procedure
and call it…and SDL won’t destroy an SDL_WINDOWID window in SDL_Quit()
or a second call to SDL_SetVideoMode().

So here’s my hypothesis:

  1. App is calling SDL_Init() and SDL_SetVideoMode().
  2. App is then setting SDL_WINDOWID environment variable to the ID of
    the SDL_SetVideoMode() window.
  3. App is then reinitializing window with a second call to
    SDL_SetVideoMode()…maybe a resize event or something.
  4. SDL doesn’t destroy the original window created by the first
    SDL_SetVideoMode, since it sees SDL_WINDOWID.
  5. When SDL is supposed to create a new one, it reuses the old and
    queries for its win32 event handler, which is the usual SDL win32 event
    handler.
  6. Window gets an event, passes through SDL, passes to the original
    event handler, which is SDL, so it passes through again, again, again,
    until stack overflows.

I’m a little foggy on the details of exactly how this scenario happens
in part #4, but I think that’s roughly what’s happening. I don’t think
this is an SDL bug in this case. Let me know if this info points you to
anything in your app, though, and we’ll go forward from there.

–ryan.


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org