freenode/#clasp - IRC Chatlog
Search
15:19:57
drmeister
Right now, clasp doesn't handle Control-C or interrupts well, I'm looking into it.
15:20:35
drmeister
When I start working with Cando seriously in the jupyterlab interface - almost immediately after starting up the first calculation I want to interrupt it and change the arguments and run it again.
15:21:02
scymtym
i think the safest solution is having the tasks cooperate by, for example, checking a flag
15:22:15
scymtym
iirc, it has means to cancel tasks and force the thread pool to shut down, but i don't think those are safe in general
15:23:41
stassats
when you interrupt it allows you to " 1: [TRANSFER-ERROR] Transfer this error to a dependent thread, if one exists.
15:27:49
drmeister
I think I need clasp to poll for interrupts at safe points and then use the Common Lisp restart machinery to shut things down safely.
15:29:10
scymtym
but that is only convenience, isn't it? the core issue is what drmeister says: unless interruptions happens at safe points, unwinding from interruptions is unsafe
15:32:49
drmeister
Give me a bit of time - I'll ask more intelligent questions once I get my bearings on this.
15:33:20
scymtym
drmeister: asked about aborting and restarting computations that take too long. i think there is potential to hose the system e.g. by leaving temporary files lying around or leaving data structures in an inconsistent state
15:34:20
drmeister
Right now I can't get lldb to ignore SIGINT and SIGSTOP so I can debug what's going on with my handlers. Grrrr
15:34:55
Shinmera
You definitely at least want to unwind properly to trigger unwind-protects and such
15:35:44
Shinmera
But then you could be interrupting during an unwind protect and things like that, so safe points are nice.
15:36:56
scymtym
stassats: i think you can't expect users (and library developers) to do all the async unwind protection
15:39:18
drmeister
scymtym: C++ unwinding and unix async signals are completely incompatible with each other. There is no way to unwind out of an async signal handler. The best one can do is set a flag in the signal handler and then wait for the C++ code to check it and unwind.
15:43:37
scymtym
stassats: maybe i'm dense here. is the scenario you are assuming with or without cooperation by the worker threads? that is are they actively checking some flag and signal the error in response to that?
15:45:58
stassats
but still, people are interrupting things, unwinding from errors, etc. without much problem
15:46:14
scymtym
for a signaled error and the handler invoking a restart (which could even abort the thread, sure), UNWIND-PROTECT is enough to ensure consistency. but not when the error is signaled from an interruption
15:46:31
stassats
async safety only comes to play when you use to send messages between threads or to do any other kind of work
15:47:21
stassats
what's left otherwise? killing the process? well, should've stayed in C++ for that
15:49:13
scymtym
i'm just saying you can't make async unwinds part of your system's normal operation
15:52:46
scymtym
sure, same for me. but if somebody designed a library that somehow used async unwinds, you couldn't use it in a webserver, say
0:07:14
drmeister
C1CCC1 The first 1 will be encountered by the parser before the last one - correct?