|
HP OpenVMS System Services Reference Manual
$SYNCH
Checks the completion status of a system service that completes
asynchronously.
On Alpha and I64 systems, this service accepts 64-bit addresses.
Format
SYS$SYNCH [efn] ,[iosb]
C Prototype
int sys$synch (unsigned int efn, struct _iosb *iosb);
Arguments
efn
OpenVMS usage: |
ef_number |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Number of the event flag specified in the call to the system service
whose completion status is to be checked by $SYNCH. The
efn argument is a longword containing this number;
however, $SYNCH uses only the low-order byte.
iosb
OpenVMS usage: |
io_status_block |
type: |
quadword (unsigned) |
access: |
read only |
mechanism: |
by 32- or 64-bit reference (Alpha and I64); by 32-bit
reference (VAX) |
I/O status block specified in the call to the system service whose
completion status is to be checked by $SYNCH. The iosb
argument is the address of this quadword I/O status block.
Description
The Synchronize service checks the completion status of a system
service that completes asynchronously. The service whose completion
status is to be checked must have been called with the
efn and iosb arguments specified,
because the $SYNCH service uses the event flag and I/O status block of
the service to be checked.
This service performs a true test for the completion of an asynchronous
service, such as $GETJPI. $SYNCH operates in the following way:
- When called, $SYNCH waits (by calling $WAITFR) for the event flag
to be set.
- When the event flag is set, $SYNCH checks to see whether the I/O
status block is nonzero. If it is nonzero, then the asynchronous
service has completed, and $SYNCH returns to the caller.
- If the I/O status block is the value 0, then the asynchronous
service has not yet completed and the event flag was set by the
completion of an event not associated with the completion of $GETJPI.
In this case, $SYNCH clears the event flag (by calling $CLREF) and
waits again (by calling $WAITFR) for the event flag to be set,
repeating this cycle until the I/O status block is nonzero.
The $SYNCH service always sets the specified event flag when it returns
to the caller. This ensures that different program segments can use the
same event flag without conflicting. For example, assume that calls to
$GETJPI and $GETSYI both specify the same event flag and that $SYNCH is
called to check for the completion of $GETJPI. If $GETSYI sets the
event flag, $SYNCH clears the flag and waits for $GETJPI to set it.
When $GETJPI sets the flag, $SYNCH returns to the caller and sets the
event flag. In this way, the flag set by $GETSYI is not lost, and
another call to $SYNCH will show the completion of $GETSYI.
The $SYNCH service is useful when a program calls an asynchronous
service but must perform some other work before testing for the
completion of the asynchronous service. In this case, the program
should call $SYNCH at that point when it must know that the service has
completed and when it is willing to wait for the service to actually
complete.
When a program calls an asynchronous service (for example, $QIO) and
actually waits in line (by calling $WAITFR) for its completion without
performing any other work, you could improve that program by calling
the synchronous form of that service (for example, $QIOW). The
synchronous services such as $QIOW execute code that checks for the
true completion status in the same way that $SYNCH does.
Required Access or Privileges
None
Required Quota
None
Condition Values Returned
SS$_NORMAL
|
The service completed successfully. The asynchronous service has
completed, and the I/O status block contains the condition value
describing the completion status of the asynchronous service.
|
SS$_ACCVIO
|
The I/O status block cannot be read by the caller.
|
SS$_ILLEFC
|
An illegal event flag was specified.
|
SS$_UNASEFC
|
The process is not associated with the cluster containing the specified
event flag.
|
$TIMCON
Converts 128-bit Coordinated Universal Time (UTC) format to 64-bit
system format or 64-bit system format to 128-bit UTC format based on
the value of the convert flag.
On Alpha and I64 systems, this service accepts 64-bit addresses.
Format
SYS$TIMCON [smnadr] ,[utcadr] ,cvtflg
C Prototype
int sys$timcon (struct _generic_64 *smnadr, unsigned int *utcadr [4],
unsigned long int cvtflg);
Arguments
smnadr
OpenVMS usage: |
date_time |
type: |
quadword (unsigned) |
access: |
read/write |
mechanism: |
by 32- or 64-bit reference (Alpha and I64); by 32-bit
reference (VAX) |
The 64-bit system format value that $TIMCON will use in the conversion.
The smnadr argument will be read from or written to
based on the value of the cvtflg argument. The
smnadr is required when converting UTC time to 64-bit
system format.
utcadr
OpenVMS usage: |
coordinated universal time |
type: |
utc_date_time |
access: |
read/write |
mechanism: |
by 32- or 64-bit reference (Alpha and I64); by 32-bit
reference (VAX) |
UTC time value that $TIMCON will use in the conversion. The
utcadr argument will be read from or written to based
on the value of the cvtflg argument. The
utcadr argument is required when converting 64-bit
system format to UTC time.
cvtflg
OpenVMS usage: |
conversion flag |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
A longword indicating the direction of the conversion. If the
cvtflg value is 0, UTC time is converted to 64-bit
system value. If the cvtflg value is 1, 64-bit system
format is converted to UTC time.
Description
The Time Converter service converts 64-bit system format time to UTC
format, and vice versa.
When converting a 64-bit system format time to 128-bit UTC format time,
the time zone of the local system is used.
When converting a 128-bit UTC format time to a 64-bit system time, the
time zone differential factor encoded in the 128-bit buffer is used.
Condition Values Returned
SS$_NORMAL
|
The service completed successfully.
|
SS$_INVTIME
|
The input time cannot be converted because its value is out of the
legal range or is a delta time, or the UTC is of an illegal format.
|
$TRANS_EVENT
Forces a transaction state change for a transaction in which there is
at least one RM participant that has set the DDTM$M_COORDINATOR flag.
Format
SYS$TRANS_EVENT [efn] ,[flags] ,iosb ,[astadr] ,[astprm] ,tid ,rm_id
,tx_event
C Prototype
int sys$trans_event (unsigned int efn, unsigned int flags, struct _iosb
*iosb, void (*astadr)(__unknown_params), int astprm, unsigned int tid
[4], unsigned int rm_id, unsigned int tx_event);
Arguments
efn
OpenVMS usage: |
ef_number |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Number of the event flag that is set when the service completes. If
this argument is omitted, event flag 0 is used.
flags
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
Reserved to HP. This argument must be zero.
iosb
OpenVMS usage: |
io_status_block |
type: |
quadword (unsigned) |
access: |
write only |
mechanism: |
by reference |
The I/O status block in which the completion status of the service is
returned as a condition value. See the Condition Values Returned
section.
The outcome of the state change is indicated by the contents of the I/O
status block.
The following diagram shows the structure of the I/O status block:
astadr
OpenVMS usage: |
ast_procedure |
type: |
procedure entry mask |
access: |
call without stack unwinding |
mechanism: |
by reference |
The AST routine that is executed when the service completes, if
SS$_NORMAL is returned in R0. The astadr argument is
the address of the entry mask of this routine. The routine is executed
in the same access mode as that of the caller of the $TRANS_EVENT
service.
astprm
OpenVMS usage: |
user_arg |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
The AST parameter passed to the AST routine specified by the
astadr argument.
tid
OpenVMS usage: |
trans_id |
type: |
octaword (unsigned) |
access: |
read only |
mechanism: |
by reference |
The identifier (TID) of transaction to which the state change is to be
applied.
rm_id
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
The identifier of the Resource Manager identifier (RMI) with which the
coordinating Resource Manager (RM) participant is associated.
tx_event
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by value |
The operation to be performed on the transaction. The permitted values
and the possible successful outcomes are listed in Table SYS-59.
Description
The $TRANS_EVENT system service is used by coordinating RM participants
to change the state of transactions.
Preconditions for the successful completion of $TRANS_EVENT include:
- The caller must have the SYSPRV privilege or be in either executive
or kernel mode.
- The RM participant must have set the DDTM$M_COORDINATOR flag on the
call to $JOIN_RM. Coordinating resource managers cannot join the
transaction by calling $ACK_EVENT.
- The access mode of the caller must be the same as or more
privileged than that of the transaction within the process.
Table SYS-59 Completion Semantics of the$TRANS_EVENT Service
Operation |
Completion Semantics |
DDTM$K_TX_PREPARE
|
A vote has been received from each RM participant and synchronized
branch.
The status code returned is the combination of the individual
votes. The possible values are:
- SS$_PREPARED. All participants are ready to commit the transaction.
Thus all RM participants voted "yes" and all synchronized branches
called $END_BRANCH. Note that a read-only vote from an RM participant
is counted as a "yes" vote but this response is not returned if all RM
participants voted read-only. Unsynchronized branches are assumed to be
willing to commit. A further operation (commit or abort) is necessary
to complete the transaction.
- SS$_FORGET. All participants are ready to permit the transaction to
be committed but do not require any further notification of transaction
events. Thus no further $TRANS_EVENT calls are required for this
transaction. Possible reasons for this response are:
- All RM participants voted read-only.
- The specified transaction (TID) did not exist.
- The specified transaction was already prepared (Cyclic graph).
- SS$_VETO. The transaction cannot be committed. No further
$TRANS_EVENT calls are required for this transaction. One reason why
the transaction cannot commit, an abort reason code, is placed in the
second longword of the
iosb argument.
|
DDTM$K_TX_COMMIT
|
The only status code returned on successful completion is SS$_FORGET.
Sufficient information has been hardened by the DECdtm transaction
manager to commit the transaction.
|
DDTM$K_TX_ABORT
|
The only status code returned on successful completion is SS$_FORGET.
Abort processing has been initiated.
|
Required Privileges
SYSPRV is required unless the caller is in executive or kernel mode.
Required Quotas
None.
Related Services
$ABORT_TRANS, $ABORT_TRANSW, $ACK_EVENT, $ADD_BRANCH, $ADD_BRANCHW,
$CREATE_UID, $DECLARE_RM, $DECLARE_RMW, $END_BRANCH, $END_BRANCHW,
$END_TRANS, $END_TRANSW, $FORGET_RM, $FORGET_RMW, $GETDTI, $GETDTIW,
$GET_DEFAULT_TRANS, $JOIN_RM, $JOIN_RMW, $SETDTI, $SETDTIW,
$SET_DEFAULT_TRANS, $SET_DEFAULT_TRANSW, $START_BRANCH, $START_BRANCHW,
$START_TRANS, $START_TRANSW, $TRANS_EVENTW
Condition Values Returned
SS$_NORMAL
|
The request was successfully queued. This value is only returned in R0.
|
SS$_ACCVIO
|
An argument was not accessible to the caller.
|
SS$_BADPARAM
|
Invalid value for
tx_event parameter.
|
SS$_EXASTLM
|
The process AST limit (ASTLM) was exceeded.
|
SS$_FORGET
|
No further $TRANS_EVENT calls are required for this transaction.
- If
tx_event = DDTM$K_TX_ABORT, then abort processing has
been initiated.
- If
tx_event = DDTM$K_TX_COMMIT, then sufficient
information has been hardened to commit the transaction.
- If
tx_event = DDTM$K_TX_PREPARE, then one of the
following has occurred:
- All participants voted read-only.
- The
tid was not known.
- The
rm_id was not known.
|
SS$_ILLEFC
|
The event flag number was invalid.
|
SS$_INSFARGS
|
A required argument was missing.
|
SS$_INSFMEM
|
There was insufficient system dynamic memory for the operation.
|
SS$_NOLOG
|
The local node did not have a transaction log.
|
SS$_NOPRIV
|
The specified
rm_id was not a coordinator of the specified
transaction.
|
SS$_NOSYSPRV
|
The caller is in user or supervisor mode but did not have SYSPRV set.
|
SS$_PREPARED
|
All participants are ready to commit the transaction. A further
operation (commit or abort) is necessary to complete the transaction.
|
SS$_TPDISABLED
|
The TP_SERVER process was not running on the local node.
|
SS$_VETO
|
The
tx_event parameter contains the value
DDTM$K_TX_PREPARE, and DECdtm or a participant was not in a position to
accept an order to commit. One reason why the transaction must abort is
supplied in the abort reason code field of the IOSB. No further call to
$TRANS_EVENT is needed for a transaction when this condition code is
returned.
|
SS$_WRONGACMODE
|
The access mode of the caller was less privileged than that of a branch
of the transaction in this process.
|
SS$_WRONGSTATE
|
The transaction was in the wrong state for the attempted operation:
- Commit operation when transaction is not prepared.
- Any operation while another call is in progress.
|
$TRANS_EVENTW
Forces a transaction state change for a transaction in which there is
at least one RM participant that has specified the DDTM$M_COORDINATOR
flag.
$TRANS_EVENTW always waits for the request to complete before returning
to the caller. Other than this, it is identical to $TRANS_EVENT.
Format
SYS$TRANS_EVENTW [efn] ,[flags] ,iosb ,[astadr] ,[astprm] ,tid ,rm_id
,tx_event
C Prototype
int sys$trans_eventw (unsigned int efn, unsigned int flags, struct
_iosb *iosb, void (*astadr)(__unknown_params), __int64 astprm, )
$TRNLNM
Returns information about a logical name.
On Alpha and I64 systems, this service accepts 64-bit addresses.
Format
SYS$TRNLNM [attr] ,tabnam ,lognam ,[acmode] ,[itmlst]
C Prototype
int sys$trnlnm (unsigned int *attr, void *tabnam, void *lognam,
unsigned char *acmode, void *itmlst);
Arguments
attr
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by 32- or 64-bit reference (Alpha and I64); by 32-bit
reference (VAX) |
Attributes controlling the search for the logical name. The
attr argument is the 32-bit address (on VAX systems)
or the 32- or 64-bit address (on Alpha and I64 systems) of a longword
bit mask specifying these attributes.
Each bit in the longword corresponds to an attribute and has a symbolic
name. The $LNMDEF macro defines these symbolic names. To specify an
attribute, use its symbolic name or set its corresponding bit. All
undefined bits in the longword have the value 0.
If you do not specify this argument or specify it as the value 0 (no
bits set), the following attributes are not used:
Attribute |
Description |
LNM$M_CASE_BLIND
|
If set, $TRNLNM does not distinguish between uppercase and lowercase
letters in the logical name to be translated.
|
LNM$M_INTERLOCKED
|
If set, $TRNLNM does not translate the current logical name until any
clusterwide logical name modifications in progress are completed. This
attribute is not set by default. If your application requires
translation using the most recent definition of a clusterwide logical
name, use this attribute to ensure that the translation is stalled
until all pending modifications have been made.
|
tabnam
OpenVMS usage: |
logical_name |
type: |
character-coded text string |
access: |
read only |
mechanism: |
by 32- or 64-bit descriptor--fixed-length string descriptor
(Alpha and I64); by 32-bit descriptor--fixed-length string descriptor
(VAX) |
Name of the logical name table or the name of a searchlist logical name
that translates the name of one or more tables in which to search for
the specified logical name. The tabnam argument is the
32-bit address (on VAX systems) or the 32- or 64-bit address (on Alpha
and I64 systems) of a descriptor pointing to this name. This argument
is required.
The name must be entered in uppercase letters. (This requirement
differs from the $CRELNT system service, which automatically changes
tabnam to uppercase.)
If the table name is not the name of a logical name table, it is
assumed to be a logical name and is translated iteratively until either
the name of a logical name table is found or the number of translations
allowed by the system have been performed. If the table name translates
to a list of logical name tables, the tables are searched in the
specified order.
lognam
OpenVMS usage: |
logical_name |
type: |
character-coded text string |
access: |
read only |
mechanism: |
by 32- or 64-bit descriptor--fixed-length string descriptor
(Alpha and I64); by 32-bit descriptor--fixed-length string descriptor
(VAX) |
Logical name about which information is to be returned. The
lognam argument is the 32-bit address (on VAX systems)
or the 32- or 64-bit address (on Alpha and I64 systems) of a descriptor
pointing to the logical name string. This argument is required.
acmode
OpenVMS usage: |
access_mode |
type: |
byte (unsigned) |
access: |
read only |
mechanism: |
by 32- or 64-bit reference (Alpha and I64); by 32-bit
reference (VAX) |
Access mode to be used in the translation. The acmode
argument is the 32-bit address (on VAX systems) or the 32- or 64-bit
address (on Alpha and I64 systems) of a byte specifying the access
mode. The $PSLDEF macro defines symbolic names for the four access
modes.
When you specify the acmode argument, $TRNLNM ignores
all names (both logical names and table names) at access modes less
privileged than the specified access mode. The specified access mode is
not checked against that of the caller.
If you do not specify acmode, $TRNLNM performs the
translation without regard to access mode; however, the translation
process proceeds from the outermost to the innermost access modes.
Thus, if two logical names with the same name but at different access
modes exist in the same table, $TRNLNM translates the name with the
outermost access mode.
itmlst
OpenVMS usage: |
32-bit item_list_3 or 64-bit item_list_64b |
type: |
longword (unsigned) for 32-bit; quadword (unsigned) for
64-bit |
access: |
read only |
mechanism: |
by 32- or 64-bit reference (Alpha and I64); by 32-bit
reference (VAX) |
Item list describing the information that $TRNLNM is to return. The
itmlst argument is the 32-bit address (on VAX systems)
or the 32- or 64-bit address (on Alpha and I64 systems) of a list of
item descriptors, each of which specifies or controls an item of
information to be returned. An item list in 32-bit format is terminated
by a longword of 0; an item list in 64-bit format is terminated by a
quadword of 0. All items in an item list must be of the same
format---either 32-bit or 64-bit.
The following diagram depicts the 32-bit format of a single item
descriptor:
The following table defines the item descriptor fields for 32-bit item
list entries:
Descriptor Field |
Definition |
Buffer length
|
A word specifying the number of bytes in the buffer pointed to by the
buffer address field.
|
Item code
|
A word containing a symbolic code describing the nature of the
information currently in the buffer, to be returned in the buffer, or
to be returned by the buffer pointed to by the buffer address field.
|
Buffer address
|
A longword containing the 32-bit address of the buffer that specifies
or receives the information.
|
Return length address
|
A longword containing the 32-bit address of a word specifying the
actual length (in bytes) of the information returned by $TRNLNM in the
buffer pointed to by the buffer address field.
|
|