freenode/#clasp - IRC Chatlog
Search
22:34:42
drmeister
That's an interesting thought - they may have implemented data structures for the MPS.
22:53:52
drmeister
frgo: Do you have a few minutes to discuss signals and interrupts again? I'm looking at the interrupt.cc code - it looks like this https://github.com/drmeister/clasp/blob/dev/src/gctools/interrupt.cc#L219 is where a thread checks if an interrupt needs to be handled.
22:54:49
drmeister
And then the thread is responsible for checking if it has any pending interrupts to handle.
22:55:20
drmeister
I say "looks like" because I remember writing this code and then you going in and working on it as well to improve the signal handling.
22:59:22
drmeister
Now, currently, the only place that pending interrupts are checked for is in clasp_musleep
23:06:19
drmeister
Ok, that sort of works - I can start a process that calls musleep every 0.1 seconds 1000 times and from another process I can kill it. But if I have the child process call musleep for 100 seconds I can't kill it because it doesn't check if there is an interrupt.
23:06:40
drmeister
I guess I need to write SLEEP so that it wakes up ever 0.1 seconds or so and checks if there was an interrupt?
23:22:52
drmeister
stassats`: Does it make sense to have musleep break up the time that it sleeps and every 0.1 second check if an interrupt has been registered?
23:25:43
drmeister
I'm working with Cando and doing things that I need to interrupt. Currently the only safe point that Clasp/Cando check is when clasp_musleep is returning.
23:26:19
drmeister
So that looked like a place to start. (SLEEP 100) only checks the interrupt once - at the end of 100 seconds.
23:27:28
drmeister
I can't always receive interrupts. The interrupt queue can only be polled. I always receive signals - and they queue interrupts.
23:28:09
drmeister
This is the whole problem with unix and C++. I can only check if interrupts are pending in C++ at safe points.
23:28:55
drmeister
I'm not sure about that. The MPS documentation says that it does - but I haven't found the API that I can access.
23:30:43
drmeister
If it's signals then maybe it can send a signal to a thread and cause the thread to block and then release when the GC is done.
23:33:20
drmeister
I need to interrupt a thread Y and tell it to exit. The only way I can see to do it is to have thread X register an interrupt in Y's interrupt queue and for Y to periodically check its interrupt queue and if it sees an something there - to act on it.
23:34:42
drmeister
I set up all of this code months ago - now I want to use make it work for me an let me interrupt worker threads.
23:35:53
drmeister
That's a good point - but it's not interrupting currently - maybe that's where I should look for a problem.
23:58:21
drmeister
Ah - when I use (mp:process-kill *p*) I'm not sending a signal to the thread *p* - I'm just queuing an interrupt.
0:01:01
stassats`
your own read-char could be using poll, but what if something in waits on a socket