> From: Taylor R Campbell <campb...@mumble.net>
> Date: Sat, 18 May 2013 23:31:23 +0000
> 
> [...]
> Sqlite3 is not a generic event dispatch loop.  The purpose of its
> progress handler is to let you run an event dispatch loop [...]

Actually the documentation says "to keep a GUI updated".  The problem
with expanding that into "run an event dispatch loop" is that
interleaving two mainloops is like serving two masters: one is always
blocking when the other wants to run.

If you are saying the library never has to block on any channels(?),
then _progress_handler may do fine.  It may even be acceptable if
it blocks Scheme just a little(?).

I can add a with-other-threads-allowed procedure that the "progress"
callback can use to allow thread switching, much as you did in
microcode-callback.

> The callback implementation I attached preserves the set of interrupts
> enabled from C to the Scheme callback,

Why do you mention this in particular?  It seems odd.  The enabled
interrupts at the point of a callback are always /gc-ok.  There is no
point in saving them.  Interrupts have to be saved/disabled before the
preceding callout, else you will have holes.

The callback implementation you attached is mostly about replacing a
vector of registered callbacks, O(1), with a red-black tree, O(log n).
That and your pre-occupation with the enabled interrupts is... weird.

_______________________________________________
MIT-Scheme-devel mailing list
MIT-Scheme-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/mit-scheme-devel

Reply via email to