GNU/EDMA uses shared memory to keep its core classes repository. Using shared memory makes thinks like run-time installation and hotswap easier.
However, GNU/EDMA has had a problem because that from the very beginning... shared memory ownership. Whenever you create a shared memory block, that block belongs to the user that created it, and therefore, only that user (or root) can delete it.
There are three main ways to deal with this issue.
So I went for the latest one, and emerald was born. Emerald is a simple server that uses UNIX sockets to accept requests for creating shared memory blocks. To keep the protocol simple (it is just one message) a very rudimentary Garbage Collector is include. If there is nothing to do, emerald go through the shared memory blocks she is aware of and if there is no process attached the block is destroyed.
A minor modification on the shared memory interface in GNU/EDMA was introduced. Now, on startup, GNU/EDMA tries to connect to emerald. On success, every shared memory allocation request is redirected to emerald, otherwise the older code is used.
One of the nice things about emerald is that, finally, I may forget about cleanup_after_crash.sh script. I need to make some minor changes but it is working pretty well. As usual I tested it using Priscila without issues.
I have not yet measure the performance penalty introduced but note that shared memory allocation is only performed on class definition and only for core classes in the shared repositories. Local repositories and run-time classes are still working the same... So, in principle it seems good enough
Emerald is in the latest commit of the project, so you can start enjoying it right now.
Next GNU/EDMA stable release is closer...