[comp.lang.ada] Question about stopping tasks.

pearson%bud.DECnet@LLL-ICDC.ARPA ("BUD::PEARSON") (12/18/86)

    I have a task whose only job is to accept data from an external device
and add them to a queue. It spends essentially all of its time in an I/O wait
state, which is what I wanted, since data may be missed if it gets distracted
too long. (When it adds something to the queue, it calls an entry in another
task to announce that there's something to process; but the other task is
designed so that it is essentially always ready to accept that entry call.)

    The problem: How do I tell this task to stop when the program
decides to end? Presently, I'm making a direct call to the "Pull the
plug on this program" system service (Starlet.Exi on this VAX / VMS
system), but I understand that this constitutes an Erroneous Program,
since I'm doing it while an I/O operation is outstanding. Another
option I've considered, having an AST transfer control to one arm of a
SELECT that also has a TERMINATE, is also illegal because of the
outstanding I/O.

    Surely people do this sort of thing all the time. What's the ticket?

  -  Peter
pearson%anchor.decnet@lll-icdc.arpa
------