Strange Crash in Direct X init

Robert Lunnon bob at yarrabee.net.au
Sun Jun 22 06:38:22 CDT 2003


I have a strange crash in thread creation with a program called little fighter II (Which is downloadable off the internet)
 LF2 Spawns a Thread in User_DirectDrawSurface_Construct  (below) and when created the thread creation call 
crashes in a mutex_lock. Strange thing is the same thread creation calll in eudora3.2 succeeds although 
there the thread is created to service Asychronous Winsock calls. In the eudora case the Thread is created much later,
after the window is up and dispalyed.


Can anyone hazard a guess as to what is happening here ? I am at a loss to explain why the 
same call should succeed in one place and fall over in another


See below for a partial debug session transcript of the code leading up to the segv fault
the program will fall over during the call to _lwp_create.

Bob...


The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /export/home/local/bin/wine ./lf2
Setting Signal Handlers
err:font:ReadFontDir Can't open directory "/usr2/robert/c/windows/Fonts"
x11drv: Warning: $DISPLAY variable ignored, using ':0.0' specified in config file
fixme:ddraw:Main_DirectDraw_SetCooperativeLevel (dd5c9438)->(00010022,00000008)

Breakpoint 1, SYSDEPS_SpawnThread (teb=0xdc043000) at ../../scheduler/sysdeps.c:204
204        fprintf(stderr,"Starting New Thread Via thr_create stack base = %lx size =%d\n",teb->stack_base, (char *)teb->stack_top - (
char *)teb->stack_base);
(gdb) bt
#0  SYSDEPS_SpawnThread (teb=0xdc043000) at ../../scheduler/sysdeps.c:204
#1  0xddb07fad in CreateThread (sa=0x0, stack=0, start=0xdcf0e50c <User_update_thread>, param=0xdd5c9bd0, flags=0, id=0x0)
    at ../../scheduler/thread.c:289
#2  0xdcf0de1b in User_DirectDrawSurface_Construct (This=0xdd5c9bd0, pDD=0xdd5c9438, pDDSD=0xdd522cbc) at dsurface/user.c:101
#3  0xdcf0decc in User_DirectDrawSurface_Create (pDD=0xdd5c9438, pDDSD=0xdd522cbc, ppSurf=0xdd522d84, pUnkOuter=0x0)
    at dsurface/user.c:140
#4  0xdcf02ae1 in HAL_DirectDraw_create_primary (This=0xdd5c9438, pDDSD=0xdd522cbc, ppSurf=0xdd522d84, pUnkOuter=0x0)
    at ddraw/hal.c:446
#5  0xdcf03bc2 in create_primary (This=0xdd5c9438, pDDSD=0xdd522dac, ppSurf=0xdd522d84, pUnkOuter=0x0) at ddraw/main.c:473
#6  0xdcf03f74 in Main_DirectDraw_CreateSurface (iface=0xdd5c9438, pDDSD=0xdd522dac, ppSurf=0xdd522d84, pUnkOuter=0x0)
    at ddraw/main.c:593
#7  0xdcf058cb in IDirectDrawImpl_CreateSurface (This=0xdd5c9444, pSDesc=0xdd522dac, ppSurface=0x44a854, pUnkOuter=0x0)
    at ddraw/thunks.c:207
#8  0x00401216 in ?? ()
#9  0xddb03aec in start_process () at ../../scheduler/process.c:455
#10 0xddb06f0e in call_on_thread_stack (func=0xddb03908) at ../../scheduler/sysdeps.c:124
(gdb) up
#1  0xddb07fad in CreateThread (sa=0x0, stack=0, start=0xdcf0e50c <User_update_thread>, param=0xdd5c9bd0, flags=0, id=0x0)
    at ../../scheduler/thread.c:289
289         if (SYSDEPS_SpawnThread( teb ) == -1)
(gdb) list
284         teb->entry_arg   = param;
285         teb->startup     = THREAD_Start;
286         teb->htask16     = GetCurrentTask();
287
288         if (id) *id = tid;
289         if (SYSDEPS_SpawnThread( teb ) == -1)
290         {
291             CloseHandle( handle );
292             close( request_pipe[1] );
293             THREAD_FreeTEB( teb );
(gdb) print teb
$1 = (TEB *) 0xdc043000
(gdb) print *teb
$2 = {except = 0xffffffff, stack_top = 0xdc043000, stack_low = 0xdbe20000, htask16 = 279, stack_sel = 0, fiber = 0x0, user_ptr = 0,
  self = 0xdc043000, tibflags = 1, mutex_count = 0, pid = 0, tid = 10, queue = 0, pad1 = 0, tls_ptr = 0x0, Peb = 0xddb78d40,
  flags = 0, exit_code = 259, teb_sel = 423, emu_sel = 0, unknown1 = 0, unknown2 = 0, startup = 0xddb07de8 <THREAD_Start>,
  thread_errno = 0, thread_h_errno = 0, signal_stack = 0xdbe21000, exit_stack = 0x0, emu_data = 0x0, last_error = 0, debug_cb = 0x0,
  debug_thread = 0, pcontext = 0x0, cur_stack = 0, ThunkConnect = 0, NegStackBase = 0, current_ss = 0, pad2 = 0, ss_table = 0x0,
  thunk_ss = 0, pad3 = 0, pad4 = {0 <repeats 15 times>}, CurrentLocale = 0, pad5 = {0 <repeats 48 times>}, delta_priority = 0,
  unknown4 = {0, 0, 0, 0, 0, 0, 0}, create_data = 0x0, suspend_count = 0, entry_point = 0xdcf0e50c, entry_arg = 0xdd5c9bd0,
  unknown5 = {0, 0, 0, 0}, sys_count = {0, 0, 0, 0}, sys_mutex = {0x0, 0x0, 0x0, 0x0}, unknown6 = {0, 0, 0, 0, 0}, code_page = 0,
  unused = {0, 0}, gs_sel = 0, request_fd = 14, reply_fd = -1, wait_fd = {-1, -1}, debug_info = 0xdc044000, pthread_data = 0x0,
  pending_list = 0x0, driver_data = 0x0, dpmi_vif = 0, vm86_pending = 0, vm86_ptr = 0x0, pad6 = {0 <repeats 624 times>},
  StaticUnicodeString = {Length = 0, MaximumLength = 522, Buffer = 0xdc043c00}, StaticUnicodeBuffer = {0 <repeats 261 times>},
  stack_base = 0xdbe20000, tls_array = {0x0 <repeats 64 times>}, pad8 = {0, 0, 0}, ReservedForNtRpc = 0x0, pad9 = {
    0 <repeats 24 times>}, ErrorInfo = 0x0}
(gdb) step
Starting New Thread Via thr_create stack base = dbe20000 size =2240512
282             _lwp_makecontext( &context, (void(*)(void *))SYSDEPS_StartThread, teb,
(gdb)
284             sigprocmask(SIG_SETMASK, NULL, &context.uc_sigmask);
(gdb)
285             err=_lwp_create( &context, LWP_DETACHED, &new_lwp ) ;
(gdb) print context
$3 = {uc_flags = 4, uc_link = 0x50, uc_sigmask = {__sigbits = {1, 0, 0, 0}}, uc_stack = {ss_sp = 0x0, ss_size = 0, ss_flags = 0},
  uc_mcontext = {gregs = {0, 143, 31, 31, 0, 0, -603705352, 9, -581817680, -593636687, 9, -581817668, 32, 0, -575639696, 23,
      -577633087, -603705360, 31}, fpregs = {fp_reg_set = {fpchip_state = {state = {-581133360, 0, -581817304, -584563419, 0, 0, 0,
            0, -576773248, -575357312, -581817576, -581817562, -581817772, -575738902, -576456548, -593636687, 9, -581817568, 32, 0,
            -577515520, -577924375, -577515520, -581817768, -577997369, 11, -576243124}, status = -581817728}, fp_emul_space = {
          fp_emul = "Ð\233\\Ý\0\0\0\0(,RÝ%E(Ý", '\0' <repeats 16 times>, "\200#\237Ý\200¾´Ý\030+RÝ&+RÝT*RÝêë®Ý\234ø£Ý±Ò\235Ü\t\0\0\0 +
RÝ \0\0\0\0\0\0\0\0Ð\223Ýé\222\215Ý\0Ð\223ÝX*RÝÇu\214Ý\v\0\0\0L:§Ý\200*RÝÿâ\214Ý\016&²ÝÈ-\224Ý\0Ð\223Ý`Ý\a\bÿâ\214Ý\020Þ\a\b\0\0\0\0\2
24\024\224Ý\0\0\0\0\030Þ\a\b\0Ð\223Ý\234*RÝ{ú\221Ý\210\024\224Ý\0Ð\223Ý°*RÝGÝ\214Ý\026ä°ÝÁä°Ý\001\0\0\0~\e²Ý;ß\a\bW\0"...,
          fp_epad = "\a\b"}, f_fpregs = {-581133360, 0, -581817304, -584563419, 0, 0, 0, 0, -576773248, -575357312, -581817576,
          -581817562, -581817772, -575738902, -576456548, -593636687, 9, -581817568, 32, 0, -577515520, -577924375, -577515520,
          -581817768, -577997369, 11, -576243124, -581817728, -577969409, -575527410, -577491512, -577515520, 134733152, -577969409,
          134733328, 0, -577497964, 0, 134733336, -577515520, -581817700, -577635717, -577497976, -577515520, -581817680,
          -577970873, -575609834, -575609663, 1, -575530114, 134733627, 87, 1, 87, -575322962, 1465002724, -575357312, 134733628,
          4096, -581817592, -575525247, 134733336}}, f_wregs = {-604889088, 4096, 87, -604889088, 134733336, 64, -575357312,
        -581817488, -605945856, -581817556, -575708909, -1, -581817544, -581817540, 320, -581817488, -575357312, -581817488,
        -581817524, -575708957, -1, -604889088, 4096, 320, -581817488, -575357312, -581817472, -575636289, -604889088, 1, 320,
        -581817488, 8192}}}, uc_filler = {-605937664, 2248704, 64, -575357312, 10}}




More information about the wine-devel mailing list