freenode/#clasp - IRC Chatlog
Search
21:41:24
drmeister
Hi - I was going to disable the concurrent queue code in clasp for the time being until I, you or someone else has the time to make it compatible with the MPS.
21:42:17
drmeister
It's a C++ data structure that needs some tweaking to make it compatible with the MPS - this may be easy or hard - but I don't have the time to figure out which of those situations it is at the moment.
21:42:48
drmeister
No - I was interested in it as well - so I hacked it into Clasp and used it in a couple of situations to see how useful it was.
21:43:07
drmeister
It's easy to implement it using Boehm and an unknown amount of work to make it work using MPS.
21:44:48
drmeister
It uses malloc and free for all memory management and to make it compatible with MPS the data structures that need to contain fixable pointers need to be set up to be allocated by MPS and scanned by Clasp code.
21:45:21
drmeister
I haven't seen any concurrent queue's from the Ravenbrook folks. If you have a URL - I would love to take a look at it.
21:46:26
frgo
I don't have any idea - but I would like to ask them if they have sth that works already. I'd imagine they do projects where they needed such a thing.
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