Tasking and Blocking Calls and Clean Termination

One should clearly understand how a timed entry call works. When you call an entry the task enters the entry’s queue and gets blocked. Upon expiration of the timeout the task is removed from the queue and the delay alternative is selected.

However when the entry call gets accepted and pending, then it is too late to abort. Execution of the rendezvous (entry of a task) or protected action (entry of a protected object) is not aborted!

Note that the language considers doing blocking stuff from a protected action an error. But it is fully legal in a rendezvous. This is a major difference between protected object and task entries. So a rendezvous will not be aborted and can block as long as it wishes.

Furthermore an entry call can be requeued to another entry. So the task will continue waiting in some other queue. When requeuing is done without with abort qualifier then this waiting cannot be aborted too. The reason is that if you started some stateful action in the first entry you might not be able to roll it back, so you must enter another entry no matter what.

In short, timed entry call is meant for other things.