diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2023-11-16 17:50:24 +0300 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2023-11-16 17:50:24 +0300 |
commit | ebd9c3c4ec2cfe2f08b4f700dcc5bcb2a8b4b847 (patch) | |
tree | 62897dce25fad99544ebd1ddb7257e74e133e477 /TODO | |
parent | 429991e37fc9ca4aeb49cf05db6819f735efe5b3 (diff) | |
download | applause2-ebd9c3c4ec2cfe2f08b4f700dcc5bcb2a8b4b847.tar.gz |
improved interruption (SIGINT, CTRL+C) support
* Just like the original LuaJIT interpreter, this will use a hook to automatically
raise an error from Lua code.
* Unfortunately, as long as Jit compilation is enabled, this cannot reliably work.
Therefore we still set an `interrupted` flag that must be
polled from tight loops.
* Instead of polling via applause_push_sample() which gave interruption-support only
to Stream:play(), we now have a separate checkint() function.
* checkint() should be manually added to all tight loops.
* Stream:foreach() and everthing based on it is now also supporting interruptions
(via checkint()).
* This internally works via applause_is_interrupted().
A C function was exposed only because LuaJIT does not support volatile-qualifiers and
would optimize away reads to the interrupted-flag.
As a side effect, we can also reset the hook.
* Flags set in signal handlers should be `volatile`.
* Added likely() and unlikely() macros to C code.
* Updated sample.ipynb Jupyter notebook: Everything important is now supported, albeit
requiring custom ILua patches.
Diffstat (limited to 'TODO')
-rw-r--r-- | TODO | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -1,13 +1,14 @@ # Bugs -* Stream:foreach() cannot be interrupted - Perhaps C core should export an interrupted variable that we can check from Lua. - For Stream:play() this is solved differently. * The MIDIStream should be flushed when starting via Stream:play(). * There are lots of limitations with Jupyter servers (see README). Perhaps it would be better to use xeus-lua, but that would require us to refactor everything - into a proper Lua library. + into a proper Lua library and it's harder to build. https://github.com/jupyter-xeus/xeus-lua +* CTRL+C interruption on the REPL loop does not always work. + Test case: while true do end + This is a known bug in LuaJIT, see https://luajit.org/faq.html#ctrlc. + As a workaround, add checkint() to all tight loops. # Features @@ -30,6 +31,8 @@ or with a Stream:savenow() shortcut. * Multi-core support via GStreamer-like queue: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-queue.html + * If it turns out, we cannot cleanly fork() after starting the Jack client, + it might be possible to send Streams as byte code dumps as well. * Stream optimizer * Automatic caching (finding identical subtrees). * Removing contraproductive caching, e.g. after plain number streams, MIDIStream, EvdevStream... |