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 ------