On Thursday, 15 March 2018 at 17:30:50 UTC, Jim King wrote:
On Thursday, 15 March 2018 at 17:12:24 UTC, Adam D. Ruppe wrote:
On Thursday, 15 March 2018 at 16:51:59 UTC, Jim King wrote:
In going through the signal documentation it looks like the signal handler must be a "nothrow @nogc" variety.

Looks like notify actually can throw an exception... the way I usually do signal handlers is just set a global variable:

__global bool interrupted = false;
void sigint_handler() { interrupted = true; }

then in the main loop check that periodically... idk if that'd work well withthe condition variable though, I have never actually used that...

Thanks for that suggestion; I was in the middle of implementing that. The problem with that is that it requires a busy loop to detect it. It is far better to block on condition variables than to have a busy loop.

Another option if you are on linux is to use eventfd. Then you can trigger it with simple write on eventfd descriptor.

As far as waiting goes it’s either read on descriptor or poll/select.
f it seems a bit more involved.
Condition variables (and mutexes) are supposed to be usable from a signal handler.

However I’d be super careful about mutexes with signal handlers. Really self-pipe trick or eventfd seems way more signal safe.



Reply via email to