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