On 1/3/2016 1:18 PM, "Torsten Hüter" wrote:
> Hi Wayne,
> 
> I've recently tried to compile KiCad on Windows (64Bit) and I've noticed that 
> PcbNew is crashing at context switching - but I had no problems early 2015 
> with that. I've seen that you have already filed a bug report [1]. I did some 
> research and this thing seems to cause constantly trouble, because some 
> assembly "hackery" is required and only MASM is officially supported [2].
> 
> Rather than trying to fix Boost, makes it sense to consider an alternative 
> way or library for the same purpose?
> 
> I've found so far these alternatives as back-end for "stackful" coroutines:
> 
> (1) Fibers on Windows
> 
> https://msdn.microsoft.com/de-de/library/windows/desktop/ms682661%28v=vs.85%29.aspx
> https://en.wikipedia.org/wiki/Fiber_%28computer_science%29

What version(s) of Windows support fibers?  I didn't see any indication
on the links above.

> 
> This seems to be the safest alternative for Windows, because Fibers are fully 
> supported by the OS and are thread-safe.
> 
> (2) POSIX ucontext.h - setcontext, getcontext, makecontext and swapcontext
> 
> Very similar compared to Windows Fibers, but deprecated since POSIX.1-2008, 
> quote from https://en.wikipedia.org/wiki/Setcontext :
> 
> "[..] POSIX.1-2004 obsoleted these functions, and in POSIX.1-2008 they were 
> removed [..]"
> 
> It is still possible to use these functions on Linux, but these are not 
> future-proof and there are no replacement functions.
> 
> An interesting talk about this topic can be found here:
> http://stackoverflow.com/questions/4298986/is-there-something-to-replace-the-ucontext-h-functions
> 
> (3) POSIX Threads
> 
> https://computing.llnl.gov/tutorials/pthreads/
> 
> It is possible to emulate Fibers with pthreads, here is a good article about 
> this subject:
> 
> http://sjansen.blogspot.de/2008/04/coroutines-in-cc-beyond-duffs-device.html
> 
> The downside is the larger overhead, but this shouldn't be a big issue for 
> KiCad, I'm sure that not more than a few coroutines are created for the tool 
> framework. Quote from the above article:
> 
> "[..] As an interesting sidenote, I'm not sure how debuggers such as gdb and 
> valgrind handle applications that switch their stacks. It might be that using 
> threads actually makes things easier to debug in this case (as the tools 
> already have support for threads). [..]"
> 
> Pthreads offer also some mechanisms for stack overflow detection.
> 
> (4) setjmp / longjmp
> 
> https://en.wikipedia.org/wiki/Setjmp.h
> 
> Context switching is also possible using these functions and some libraries 
> like "picoro" use that for Coroutines. However stack handling is difficult, 
> especially stack overflow protection is not easy to implement.
> 
> http://dotat.at/cgi/git/picoro.git
> 
> --
> 
> Summary: Fibers (Windows) and Pthreads (all POSIX-compliant operating 
> systems) seem to be the most promising alternatives for context switching. 
> This way it would be possible to get rid of the Boost.Context dependency 
> while using standard libraries.
> 
> What do you think, should I invest more time into this topic (refactoring of 
> coroutine.h using these alternatives and write a stress test application)?

I don't have any strong opinions either way.  However, I did not write
the code.  Tom may have a stronger opinion about this than I do since he
wrote the code.  Personally I'm not the biggest fan of coroutines.  I
know the make the code easier to read but I'm not convinced they are
necessary in an event driven design.

Thanks for the links.  They are interesting.

Cheers,

Wayne


> 
> Thanks, 
> Torsten
> 
> [1] KiCad issues with Boost 1.59, bug report, 
> https://github.com/Alexpux/MINGW-packages/issues/836
> [2] Boost context requirements, 
> http://www.boost.org/doc/libs/1_60_0/libs/context/doc/html/context/requirements.html
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : [email protected]
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
> 


_______________________________________________
Mailing list: https://launchpad.net/~kicad-developers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~kicad-developers
More help   : https://help.launchpad.net/ListHelp

Reply via email to