Thanks for the note on ThreadSafeFlag; I'll use that for now.
BTW: no need to poll for interrupt driven events. The latter wake up the CPU, after handling the ISR it proceeds right from where it went to light sleep (presumably after WFI or something). If it decides nothing is ready it goes right back to sleep.