HP OpenVMS Systemsask the wizard |
The Question is: I usually run my VMS time critical applications Asynchronously, where I use AST routines and event flags. Relating to QIO reads, can you please explain to me: 1) what VMS does with the event flag when the AST fires? 2) when is it okay for the app to clear or set the event flag? 3) what does it mean when the AST fires with a SUSPPENDED IOSB condition and what am I supposed to do when I get it? for example, do I clear the event flag and issue the QIO read again? I'd appreciate a quick response and thank you in advance. The Answer is :
Please consider the use of EFN$C_ENF as your event flag, a constant
that is defined in efndef and that is documented in the documentation.
Please see topic (1661) and referenced topics for general information
on asynchronous and AST-based programming.
1: OpenVMS will write to the IOSB, will set the EF, and will then
trigger the AST, in that order. In practice, the order of the
processing of the completion will be consistent and will be
exactly as you would expect.
2: It is appropriate to clear the EF when there is no outstanding
asynchronous change pending for the EF. (Determining when there
are no asynchronous activities can potentially be an interesting
challenge.)
All asynchronous system calls are expected to automatically clear
the specified event flag, when the call is initially invoked.
3: You have received an error from the asynchronous portion of the
call, and specifically that the target (process?) associated with
the call is reporting the suspended error. Given that the AST is
active, the specified event flag will have been set -- assuming you
are not using the EFN$C_ENF mechanism, that is.
When an event flag is required and EFN$C_ENF cannot be used, the
consistent use of lib$get_ef and lib$free_ef is prefered, as this will
reserve and release event flags in a coordinated and controlled fashion.
Proper event flag reservation can reduce the contention on event flags,
though it is still possible for a non-modular application to hijack
an event flag -- with potential consequences ranging from the obscure
to the application-catastrophic.
In addition to (1661), also please see (681), (2681), (2922), (5534),
(6138), (6608), (7629), and likely various other topics. Topic (7397)
might also be of some interest here, as will the Internals and Data
Structures Manual.
The Ask The Wizard area is not in a position to provide a quick or
a timely or a rapid response, as was hopefully very clearly stated
in the information posted prior to the question form -- rapid answers
to most any time-critical or business-critical questions are available
from the customer support center.
|