GDSX (Extended General Device Support) Manual

Service Routines
Extended General Device Support (GDSX) Manual529931-001
8-21
DO^CP
Considerations
Because the working stack images of tasks are swapped to and from an extended
data segment during I/O operations, I/O must be performed to and from global
buffers.
If you want USCODE to provide calls to ^AWAITIO[X] in order to wait for I/O
completion on ^DEVICEINFO2, ^FILE_GETINFOBYNAME_, and
^PROCESS_CREATE_ service routines, as would be done for typical nowaited
Guardian procedure calls, you must set the PROCNOWAIT configuration
parameter to 1.
If you want TSCODE to supply AWAITIO[X] calls to complete these nowaited I/Os
on behalf of USCODE, you set PROCNOWAIT to 0. See PROCNOWAIT on
page 2-70 for more information.
DO^CP
This procedure automatically does a GET^CPSEM, checkpoints whatever is in the
checkpoint buffer to the backup process, and then automatically does a GIVE^CPSEM.
The call to GIVE^CPSEM is not done if the call to GET^CPSEM determined that the
calling task already owned the checkpoint semaphore when GET^CPSEM was called.
Unlike ^CHECKPOINT, a restart point is not established at the statement following the
call to DO^CP.
At the time that DO^CP is called, you should already have queued data for
checkpointing by calling Q^CP or Q^CPX, both of which copy data to the TSCODE
checkpoint buffer. The size of the checkpoint buffer is specified by the MAXCPSIZE
configuration parameter. See the description of Q^CP[X] on page 8-57 for more
information.
status returned value
INT:value
Caution. If a task owning one or more semaphores stops, the primary GDSX process stops.
If a task owning one or more semaphores faults with noretn equal to 1 in a call to FAULT, the
primary GDSX process stops.
Caution. Use ^CHECKPOINT(2) instead of Q^CPX and DO^CP to checkpoint extended
memory buffer pools. As DO^CP checkpoints directly across to the backup process, using
Q^CPX and DO^CP to checkpoint extended memory buffers works only for pool areas
allocated in exactly the same area of memory in both the primary and the backup.
status := DO^CP