Summary: Stack overflow/access violation when throwing
                    exceptions from fibers
           Product: D
           Version: D2
          Platform: All
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos

--- Comment #0 from Andrew Lauritzen <> 2012-04-18 
16:04:59 PDT ---
Throwing exceptions from fibers seems buggy on Windows in both 2.058 and 2.059
(and perhaps earlier). The following modification to the example given in the
unit test (adding unrelated exception handling to the same scope) fails with a
"Stack Overflow" exception, followed by tons of access violations:

   enum MSG = "Test message.";
   string caughtMsg;
   (new Fiber({
           throw new Exception(MSG);
       catch (Exception e)
           caughtMsg = e.msg;
   assert(caughtMsg == MSG);
   // Add these two lines
   try { caughtMsg = "Hello"; }
   catch (Exception e) { caughtMsg = "World"; }

It seems brittle as well. Adding a "assert(caughtMsg == "Hello");" to the end
of the above program for instance avoids the access violations (but still shows
the stack overflow in the debugger). Similarly playing with the caughtMsg
assignments (omitting one) or adding another assert at the end of the program 
will sometimes cause the program to run without error. This is in debug mode
with optimizations off to theoretically avoid dead code elimination, but
clearly something is easily thrown off.

Tested on several machines in Windows 7 x64 (but with a 32-bit D2 application
of course).

Configure issuemail:
------- You are receiving this mail because: -------

Reply via email to