Linux signal handling - notifying a condition variable

Jim King jking at apache.org
Thu Mar 15 16:51:59 UTC 2018


I am trying to add graceful shutdown support to a test harness.  
In the test harness, a server class consumes a thread to accept 
connections and service them.  In order to stop the server, it 
has to be interrupted.  This interruption mechanism is based on 
core.sync.condition.

I want to add a signal handler so that if SIGINT is received, the 
server is interrupted and stops gracefully.

In going through the signal documentation it looks like the 
signal handler must be a "nothrow @nogc" variety.  Makes sense - 
there's very little you can do in a signal handler.

I tried carrying this down through to a class that ends up 
calling core.sync.condition.Condition.notifyAll(), however that 
method is not declared as "nothrow @nogc", therefore I assume 
that means I cannot use core.sync.condition.Condition from a 
signal handler.  It would seem to me that a notify mechanism in a 
condition variable implementation perhaps could throw, but I 
wouldn't expect it to do any garbage collection.

How is one supposed to intercept SIGINT and notify a condition 
variable?  Is this a deficiency in the standard library?

- Jim


More information about the Digitalmars-d mailing list