GDSX Manual
Design and Development
Extended General Device Support (GDSX) Manual–134303
2-34
Takeover Processing
4. The task at the head of each list is given the corresponding semaphore and is placed
on the ready list.
5. The remaining tasks in each list are queued for the corresponding semaphore with
tcb.statex.wait^cause set to sem^wait (a literal equal to 1).
USER^TAKEOVER
This user exit is called when system and user tasks have been created but are stopped.
Thus USER^TAKEOVER can alter memory contents prior to resumption of normal
operation.
Creating a New Backup Process
After normal operation is resumed, the backup task attempts to create a new backup
process.
If the primary process failed for any reason other than CPU failure, the backup task in
the backup process waits 30 seconds and then attempts to create a new backup. If this
attempt fails, another attempt will be made after 15 seconds. This process continues,
with the time between attempts increasing to 30 seconds, then 45 seconds, then 60
seconds, and so on, until the time between attempts reaches 10 minutes where it remains
until a backup is successfully created. (If the backup process fails for some reason, the
same process occurs as the primary attempts to create a new backup.)
If the primary process failed due to CPU failure, the steps just described start 30 seconds
after the CPU is reloaded.
In the backup process TSCODE calls user exits in the following order:
1. USER^INIT^CONFIG^PARAMS
2. USER^VERSION
3. USER^INITIALIZE
Then, in the primary process TSCODE checkpoints data to the backup and calls
USER^BACKUP.
^RECLAIMBUFFER
When a task does a type 2 checkpoint in the former primary, the task has its buffer
images copied to different addresses in the former backup. In the new primary,
therefore, any memory pool buffer addresses that the task stored in its data stack are no
longer valid.
A task recovers its buffer images by making calls to ^RECLAIMBUFFER. This
procedure is passed (by reference) the word pointer to the data as it was allocated in the
Caution. In the USER^TAKEOVER procedure you cannot remap buffers allocated in the
former primary process (which existed before the takeover) by calling ^RECLAIMBUFFER,
because each active user task must reclaim its own buffers, and no user task is active during
execution of USER^TAKEOVER.