After adding threads into the Windows port of SBCL there were some errors in the way Lisp callbacks worked when called from the C code: when running Lisp code in a callback the thread had its gc_safe
flag set. This flag means that this thread is in a section of code that is safe regarding the garbage collector and that it promises not to touch the Lisp heap. But this invariant is clearly violated - so callbacks should clear this flag and check whether the thread should suspend to ensure safe garbage collection. And similarly, when returning to the C code we should set this flag and check the thread suspension predicate.
The fixes are in github and the fixed binary is at http://sites.google.com/site/dmitryvksite/sbcl-distr/sbcl-1.0.36.16-threads-2.msi.
The next thing on my list is to fix the read-char-no-hang
function for Windows sockets.