Mimicing the style found elsewhere:
diff --git a/src/eval.c b/src/eval.c
index b8a6159..fc16c15 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3488,9 +3488,9 @@ unbind_for_thread_switch (struct thread_state *thr)
{
union specbinding *bind;
- for (bind = thr->m_specpdl_ptr; bind != thr->m_specpdl; --bind)
+ for (bind = thr->m_specpdl_ptr; bind > thr->m_specpdl;)
{
- if (bind->kind >= SPECPDL_LET)
+ if ((--bind)->kind >= SPECPDL_LET)
{
bind->let.saved_value = find_symbol_value (specpdl_symbol (bind));
do_one_unbind (bind, 0);
With this I can eval the progn many times. I'm not sure why it's 23
the first time, then "23 (#o27, #x17, ?\C-w)" all subsequent times:
23
23 (#o27, #x17, ?\C-w) [3 times]
A couple other comments on the concurrency branch:
• thread-yield should call timer_check. See discussion at:
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=15045#176 • condition-variablep should be condition-variable-p