
I use boost::context to implement cooperative multitasking. At the moment I use boost 1.57 on Windows 7 with VisualStudio 2013.
Everything works fine until I throw an exception from a context created by "boost::context::make_fcontext(.......)".
This guy metioned in his blogpost, that this problem was solved in boost 1.53 ("Boost 1.53 has updated and fixed version of boost::context
Actually the exception never leaves the stack frame of the context, because I have put a try catch block inside the context-function as it was recommended. - If I got the docs right Here is a small demo. This crashes from V2013 standard C++ unit test. When I step on the exception throwing line (the exception type does not matter) then I get the "First-chance exception at 0x71E026A2 (clr.dll) in vstest.executionengine.x86.exe: 0x80000001: Not implemented (parameters: 0x00000001, 0x0644AC84)." exception and when I pass it to the system then a lot of "0xC0000005: Access violation" exceptions. I have also played around with the stack size, but it does not seem to have any effect. void fException() { std::cout << "I am still ok" << std::endl; throw int(42); // The crash occurs here } void f1(intptr_t) { try { std::cout << "Greetings from context f1" << std::endl; fException(); std::cout << "Never reach this" << std::endl; } catch (...) { std::cout << "Exception caught" << std::endl; } } void test() { std::size_t size(512*1024); char* stack1((char*)std::malloc(size)); void* stackPointer1(stack1 + size); boost::context::fcontext_t fcm, fc1; fc1 = boost::context::make_fcontext(stackPointer1, size, f1); std::cout << "Greetings from main thread stack" << std::endl; boost::context::jump_fcontext(&fcm, fc1, 0); } From: Nat Goodspeed <nat@lindenlab.com> To: "boost-users@lists.boost.org" <boost-users@lists.boost.org>, Date: 10.03.2015 17:40 Subject: Re: [Boost-users] [context] Crash in case of exception from a context Sent by: "Boost-users" <boost-users-bounces@lists.boost.org> On Tue, Mar 10, 2015 at 10:32 AM, <Tamas.Ruszkai@leica-geosystems.com> wrote: library
that addresses exactly this problem. "), but somehow I still have the same thing in 1.57. Is there some special preprocessor flag (#define) that I have to activate to get this fix?
That contradicts what the Boost 1.57 documentation itself says [0]: "Exceptions in context-function If the context-function emits an exception, the behaviour is undefined. (!) Important context-function should wrap the code in a try/catch block." [0] http://www.boost.org/doc/libs/1_57_0/libs/context/doc/html/context/context.h... _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users