This introduces some new functions to handle the specpdl. The basic
commite160922c665ba65e1dba5b87a924927e61be43b9
authorTom Tromey <tromey@redhat.com>
Wed, 15 Aug 2012 19:04:34 +0000 (15 13:04 -0600)
committerTom Tromey <tromey@redhat.com>
Wed, 15 Aug 2012 19:04:34 +0000 (15 13:04 -0600)
treede8f62c4788a9d641280cabc94767114f462aef4
parent14b3dc5e4f2cdefde1ba04ddd3525115e7ca7dce
This introduces some new functions to handle the specpdl.  The basic
idea is that when a thread loses the interpreter lock, it will unbind
the bindings it has put in place.  Then when a thread acquires the
lock, it will restore its bindings.

This code reuses an existing empty slot in struct specbinding to store
the current value when the thread is "swapped out".

This approach performs worse than my previously planned approach.
However, it was one I could implement with minimal time and
brainpower.  I hope that perhaps someone else could improve the code
once it is in.
src/eval.c
src/lisp.h
src/thread.c
src/thread.h