[Issue 13105] New: Stack overflow in Fibers running druntime unittests

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sat Jul 12 01:34:51 PDT 2014


https://issues.dlang.org/show_bug.cgi?id=13105

          Issue ID: 13105
           Summary: Stack overflow in Fibers running druntime unittests
           Product: D
           Version: unspecified
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: major
          Priority: P1
         Component: druntime
          Assignee: nobody at puremagic.com
          Reporter: r.sagitario at gmx.de

When I build github master and run the druntime unittests for Win32, I get a
stack overflow when an exception is thrown from within a fiber. thread.d, line
4719:

unittest
{
    enum MSG = "Test message.";

    try
    {
        (new Fiber({
            throw new Exception( MSG );
        })).call();
        assert( false, "Expected rethrown exception." );
    }
    catch( Throwable t )
    {
        assert( t.msg == MSG );
    }
}

It crashes with this stack:
     KernelBase.dll!_LoadLibraryExW at 12()  + 0xc6 bytes    
     kernel32.dll!_LoadLibraryW at 4()  + 0x12 bytes    
     dbghelp.dll!LoadDLL()  + 0xe9 bytes    
     dbghelp.dll!symsrvLoadLib()  + 0x43 bytes    
     dbghelp.dll!AddPath()  + 0x78 bytes    
     dbghelp.dll!symsrvTest()  + 0x4e bytes    
     dbghelp.dll!diaLocatePdb()  + 0x508 bytes    
     dbghelp.dll!diaGetPdb()  + 0x1b7 bytes    
     dbghelp.dll!GetDebugData()  + 0x23b bytes    
     dbghelp.dll!modload()  + 0x287 bytes    
     dbghelp.dll!LoadSymbols()  + 0x352 bytes    
     dbghelp.dll!FindModule()  + 0x1ab bytes    
     dbghelp.dll!_SymFunctionTableAccess64AccessRoutines at 20()  + 0x71 bytes    
     dbghelp.dll!_SymFunctionTableAccess64 at 12()  + 0x17 bytes    
     dbghelp.dll!FunctionTableAccessRoutineLocal()  + 0x13 bytes    
     dbghelp.dll!DbhStackServices::GetFunctionEntry()  + 0x23 bytes    
     dbghelp.dll!DbsX86StackUnwinder::SearchForReturnAddress()  + 0x3f0 bytes   
     dbghelp.dll!DbsX86StackUnwinder::FrameInfoUnwind()  + 0x3ec bytes    
     dbghelp.dll!DbsX86StackUnwinder::Unwind()  + 0x161 bytes    
     dbghelp.dll!DbsStackUnwinder::DbhUnwind()  + 0xcd bytes    
     dbghelp.dll!PickX86Walk()  + 0x153 bytes    
     dbghelp.dll!_StackWalkEx at 40()  + 0x32e bytes    
     dbghelp.dll!_StackWalk64 at 36()  + 0x89 bytes    
    
unittest.exe!_D4core3sys7windows10stacktrace10StackTrace11traceNoSyncFkPS4core3sys7windows7windows7CONTEXTZAm()
 + 0x298 bytes    
     unittest.exe!_D4core3sys7windows10stacktre10Sင???()  + 0x2c bytes    
     unittest.exe!_D4core6thread18__unittestL4719_95FZ9__lambda1FNaNfZv()  +
0x39 bytes    

I guess it would not happen if it won't be the first stracktrace generated
which has to load additional DLLs.


I also get a stack overflow with the fiber unittests for Win64 if I create a
druntime debug build and a collection runs from within the fiber. The recursive
calls for GC scanning are too deep then (50).

--


More information about the Digitalmars-d-bugs mailing list