As someone who does unspeakable, but safe, things in signal handlers, I can confirm that it is easy to stray off the path of async-signal-safety.
Defensive programming tells us to minize code in signal handlers and the safest is to avoid using the signal at all when possible :).