On the AmigaE mailing list we have been discussing how (or even *if*) you should remove an IO message sent by the timer.device, in the case that you request a soft interrupt to be generated (instead of normal signal) when the IO message arrives at your port.
The autodocs quite clearly state that "When removing a known complete IORequest from a port, WaitIO() is the required. A simple Remove() is not enough." But this may have assumed you were just waiting on a signal on your message port, rather than having a soft interrupt generated. And it makes no mention of GetMsg().
And to make it worse, at least in the case where the message port only receives a single IO message from timer.device, before that message is re-used (for a repeating timer), then the code appears to work equally well whether you:
1. Never bother to remove the IO message from the message port. This must be the wrong approach.
2. Use WaitIO() inside the interrupt. This seems a bit hairy, since (a) if the interrupt really did wait then it would kill the whole OS, and (b) an interrupt is not a task (and therefore it does not have any signals to use or modify).
3. Use GetMsg() to remove the IO message. This would seem most likely to be the best answer, except for the autodoc's clear message that only WaitIO() is allowed.
I am guessing we need an AmigaOS dev to answer this for certain, but anyone else feel free to give your opinion too!