|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: B T
Length: 23600 (0x5c30)
Types: TextFile
Names: »B«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11
└─⟦129cab021⟧ »DATA«
└─⟦bb25a46d4⟧
└─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16
└─⟦6f12a12be⟧ »DATA«
└─⟦bb25a46d4⟧
└─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04
└─⟦d65440be7⟧ »DATA«
└─⟦bb25a46d4⟧
└─⟦this⟧
with ASAOPEN;
with DEVICE_INDEPENDENT_IO;
with JOB_SEGMENT;
with GATEWAY_OBJECT;
separate (ACTIONS)
package body MODEL is
package ASAC renames ASA_DEFINITIONS.COMMANDS;
package DIIO renames DEVICE_INDEPENDENT_IO;
ANNOTATIONS : constant STRING :=
ASA_DEFINITIONS.MAIN_CLASS_DIRECTORY & ".ANNOTATIONS";
ANNOTATION_TYPES : constant STRING :=
ASA_DEFINITIONS.MAIN_CLASS_DIRECTORY & ".ANNOTATION_TYPES";
ASSOCIATED : constant STRING :=
ASA_DEFINITIONS.MAIN_CLASS_DIRECTORY & ".ASSOCIATED";
procedure IMAGE_NAME (HANDLE : DC.GATEWAY_HANDLE;
VISIBLE : BOOLEAN;
READ_ONLY : BOOLEAN;
NO_IMAGE : out BOOLEAN;
SHOW_PROPERTY_IMAGE : out BOOLEAN;
ID : out DC.IMAGE_IDENTITY) is
GATEWAY_OBJECT : constant DIR.OBJECT := GWO.DIRECTORY_OBJECT (HANDLE);
S : SS.CONDITION;
begin
SHOW_PROPERTY_IMAGE := FALSE;
ID := (I1 => DIR.UNIQUE (GATEWAY_OBJECT), I2 => 0);
NO_IMAGE := TRUE;
if not READ_ONLY then
S := CHECK_WRITEABLE (HANDLE);
LOGGER.STATUS (S);
end if;
exception
when PROFILE.ERROR =>
LOGGER.ERROR ("Image construction is quitting after errors",
RAISE_ERROR => FALSE);
end IMAGE_NAME;
procedure BUILD_IMAGE (HANDLE : DC.GATEWAY_HANDLE;
VISIBLE : BOOLEAN;
IN_PLACE : BOOLEAN;
FIRST_TIME : BOOLEAN;
READ_ONLY : in out BOOLEAN;
IMAGE : DC.IMAGE_ID;
NO_IMAGE : out BOOLEAN;
UNDERLYING_OBJECT : out DIRECTORY.OBJECT) is
ACTION_ID : ACTION.ID;
C : RO.CONTEXT;
DIRECTORY_EXISTS : BOOLEAN;
FILE_EXISTS : BOOLEAN;
HAS_DESTROYED_GATEWAY : BOOLEAN;
S : SS.CONDITION;
GATEWAY_OBJECT : constant DIR.OBJECT := GWO.DIRECTORY_OBJECT (HANDLE);
GATEWAY_FULL_NAME : constant STRING :=
DIR.NAMING.GET_FULL_NAME (GATEWAY_OBJECT);
HOST : constant STRING := ASAP.DATA_HOST (HANDLE);
MODEL : constant STRING := ASAP.DATA_CONTEXT (HANDLE) &
UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (HANDLE);
use GATEWAYS;
begin
NO_IMAGE := TRUE;
UNDERLYING_OBJECT := GATEWAY_OBJECT;
if not READ_ONLY then
if SS.ERROR (CHECK_WRITEABLE (HANDLE)) then
return;
end if;
end if;
RO.ACQUIRE (A_CONTEXT => C,
STATUS => S,
MACHINE => HOST,
INSTANCE => ASA_DEFINITIONS.ASA);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
if not IS_UP_TO_DATE (HANDLE, IN_CONTEXT => C) then
case ASAS.ACTION_WHEN_OUT_OF_DATE is
when ASAS.ABANDON =>
LOGGER.NEGATIVE
("The gateway object " & GATEWAY_FULL_NAME &
" may not be up-to-date. Use Asa.Accept_Changes " &
"to update it");
when ASAS.ACCEPT_CHANGES =>
LOGGER.POSITIVE
("The gateway object " & GATEWAY_FULL_NAME &
" may not be up-to-date. Changes are being accepted");
GWO.CLOSE (HANDLE, S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
ACTION_ID := ACTION.START;
ACCEPT_CHANGES
(GATEWAY_OBJECT => GATEWAY_OBJECT,
IN_CONTEXT => C,
MODEL => MODEL,
COMMENTS => "Automatic Accept_Changes issued by " &
"Build_Image from object " &
GATEWAY_FULL_NAME,
WORK_ORDER => "<DEFAULT>",
ACTION_ID => ACTION_ID,
HAS_DESTROYED_GATEWAY => HAS_DESTROYED_GATEWAY);
ACTION.FINISH (THE_ACTION => ACTION_ID, DO_COMMIT => TRUE);
if HAS_DESTROYED_GATEWAY then
LOGGER.ERROR
("Gateway object " & GATEWAY_FULL_NAME &
" has been destroyed while accepting changes. " &
"Unable to create an image for it.");
else
GWO.OPEN_OBJECT (OBJECT => GATEWAY_FULL_NAME,
SLOT => GWO.MAIN_SLOT,
H => HANDLE,
ERRORS => S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
end if;
when ASAS.CONTINUE =>
LOGGER.WARNING ("The gateway object " & GATEWAY_FULL_NAME &
" may not be up-to-date.");
end case;
end if;
--
-- Before calling asaedit we check the existence of the file,
-- because asaedit won't tell much it they do not exist.
--
RO.FILE_EXISTS (THE_FILE => ASAP.DATA_CONTEXT (HANDLE),
IN_CONTEXT => C,
STATUS => S,
EXISTS => DIRECTORY_EXISTS);
LOGGER.STATUS (S);
if DIRECTORY_EXISTS then
if READ_ONLY then
RO.FILE_EXISTS
(THE_FILE =>
ASAP.DATA_CONTEXT (HANDLE) & UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (HANDLE),
IN_CONTEXT => C,
STATUS => S,
EXISTS => FILE_EXISTS);
LOGGER.STATUS (S);
if not FILE_EXISTS then
LOGGER.NEGATIVE ("Remote file " & ASAP.DATA_CONTEXT (HANDLE) &
UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (HANDLE) & " does not exist");
end if;
end if;
else
LOGGER.NEGATIVE ("Remote directory " &
ASAP.DATA_CONTEXT (HANDLE) & " does not exist");
end if;
declare
REMOTE_ANNOTATIONS : constant STRING :=
UNIX.TEMPORARY_FILENAME (ASAC.ANNOTATIONS_EXTENSION);
REMOTE_ANNOTATION_TYPES : constant STRING :=
UNIX.TEMPORARY_FILENAME (ASAC.ANNOTATION_TYPES_EXTENSION);
ASAEDIT_COMMAND : constant STRING :=
ASAS.BIN_DIRECTORY (ASAP.DATA_HOST (HANDLE)) &
UNIX.CONTEXT_SEPARATOR &
ASAC.ASAEDIT &
' ' &
ASAP.DATA_CONTEXT (HANDLE) &
UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (HANDLE) &
' ' &
ASAC.START_NODE &
' ' &
ASAP.ASA_NODE_NUMBER (HANDLE) &
' ' &
ASAC.NO_WARNINGS &
' ' &
ASAC.ANNOTATIONS &
' ' &
REMOTE_ANNOTATIONS &
' ' &
ASAC.ANNOTATION_TYPES &
' ' &
REMOTE_ANNOTATION_TYPES;
RM_COMMAND : constant STRING := UNIX.REMOVE &
' ' &
REMOTE_ANNOTATIONS &
' ' &
REMOTE_ANNOTATION_TYPES;
begin
LOGGER.NOTE ("Copying file " & ANNOTATIONS &
" to " & REMOTE_ANNOTATIONS);
RO.PUT (FROM_FILE => ANNOTATIONS,
TO_FILE => REMOTE_ANNOTATIONS,
IN_CONTEXT => C,
STATUS => S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
LOGGER.NOTE ("Copying file " & ANNOTATION_TYPES &
" to " & REMOTE_ANNOTATION_TYPES);
RO.PUT (FROM_FILE => ANNOTATION_TYPES,
TO_FILE => REMOTE_ANNOTATION_TYPES,
IN_CONTEXT => C,
STATUS => S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
if READ_ONLY then
EXECUTE (COMMAND => ASAEDIT_COMMAND &
' ' &
ASAC.READ_ONLY &
UNIX.COMMAND_SEPARATOR &
RM_COMMAND,
INTERACTIVE => TRUE,
IN_CONTEXT => C,
TIMEOUT => RO.WAIT_FOREVER);
else
EXECUTE (COMMAND => ASAEDIT_COMMAND &
UNIX.COMMAND_SEPARATOR &
RM_COMMAND,
INTERACTIVE => TRUE,
IN_CONTEXT => C,
TIMEOUT => RO.WAIT_FOREVER);
end if;
end;
RO.RELEASE (A_CONTEXT => C, STATUS => S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
exception
when PROFILE.ERROR =>
LOGGER.ERROR ("Image construction is quitting after errors",
RAISE_ERROR => FALSE);
end BUILD_IMAGE;
--[bug]
-- Due to a bug in DISPATCH, the CMVC operations are called with an
-- handle that it not open under the action used for the operation.
-- To avoid locking problems, we immediately close the handle and
-- reopen the same object with the appropriate action. However there
-- is still an interesting issue: when the handle is reopen for the
-- post operation (with a new action), a locking error may be
-- detected, and the post operation may be called with a closed
-- handle. We have to live with this...
--
function REOPEN (HANDLE : in GWO.HANDLE; ACTION_ID : in ACTION.ID)
return GWO.HANDLE is
RESULT : GWO.HANDLE;
S : SS.CONDITION;
THE_OBJECT : constant DIR.OBJECT := GWO.DIRECTORY_OBJECT (HANDLE);
begin
GWO.CLOSE (HANDLE);
GWO.OPEN_MAIN_OBJECT (OBJECT => THE_OBJECT,
H => RESULT,
UPDATE => FALSE,
ACTION_ID => ACTION_ID,
ERRORS => S);
LOGGER.STATUS (S);
return RESULT;
end REOPEN;
procedure PRE_CHECK_IN (HANDLE : DC.GATEWAY_HANDLE;
SUBOBJECT : DIRECTORY.OBJECT;
RESPONSE : PROFILE.RESPONSE_PROFILE;
ACTION_ID : ACTION.ID;
ERRORS : in out DC.ERROR_COUNTS) is
THE_HANDLE : DC.GATEWAY_HANDLE := REOPEN (HANDLE, ACTION_ID);
C : RO.CONTEXT;
HAS_DESTROYED_GATEWAY : BOOLEAN;
S : SS.CONDITION;
THE_ACTION : ACTION.ID := ACTION_ID;
GATEWAY_OBJECT : constant DIR.OBJECT := GWO.DIRECTORY_OBJECT (THE_HANDLE);
GATEWAY_FULL_NAME : constant STRING :=
DIR.NAMING.GET_FULL_NAME (GATEWAY_OBJECT);
HOST : constant STRING := ASAP.DATA_HOST (THE_HANDLE);
MODEL : constant STRING := ASAP.DATA_CONTEXT (THE_HANDLE) &
UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (THE_HANDLE);
begin
PROFILE.SET (RESPONSE);
RO.ACQUIRE (A_CONTEXT => C,
STATUS => S,
MACHINE => HOST,
INSTANCE => ASA_DEFINITIONS.ASA);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
if not IS_UP_TO_DATE (THE_HANDLE, IN_CONTEXT => C) then
LOGGER.POSITIVE ("Accepting changes from model " & MODEL);
GWO.CLOSE (THE_HANDLE, S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
ACCEPT_CHANGES (GATEWAY_OBJECT => GATEWAY_OBJECT,
IN_CONTEXT => C,
MODEL => MODEL,
COMMENTS => "Automatic Accept_Changes issued by " &
"Check_In from object " &
GATEWAY_FULL_NAME,
WORK_ORDER => "<DEFAULT>",
ACTION_ID => ACTION_ID,
HAS_DESTROYED_GATEWAY => HAS_DESTROYED_GATEWAY);
if HAS_DESTROYED_GATEWAY then
LOGGER.WARNING ("The gateway object " & GATEWAY_FULL_NAME &
" has been destroyed while accepting " &
"changes. Cmvc.Check_In is unable to proceed");
ACTION.FINISH (THE_ACTION => THE_ACTION, DO_COMMIT => TRUE);
ERRORS := (WARNINGS => 0, ERRORS => 0, FATAL => TRUE);
return;
end if;
end if;
RO.RELEASE (A_CONTEXT => C, STATUS => S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
ERRORS := (WARNINGS => 0, ERRORS => 0, FATAL => FALSE);
exception
when PROFILE.ERROR =>
ERRORS := (WARNINGS => 0, ERRORS => 1, FATAL => FALSE);
end PRE_CHECK_IN;
procedure PRE_CMVC_COPY (HANDLE : DC.GATEWAY_HANDLE;
SUBOBJECT : DIRECTORY.OBJECT;
RELEASE : BOOLEAN;
CONTROLLED : BOOLEAN;
JOINED : BOOLEAN;
SOURCE_VIEW : DIRECTORY.OBJECT;
DESTINATION_VIEW : DIRECTORY.OBJECT;
FIRST_CALL : BOOLEAN;
DO_NOT_COPY : out BOOLEAN;
RESPONSE : PROFILE.RESPONSE_PROFILE;
ACTION_ID : ACTION.ID;
ERRORS : in out DC.ERROR_COUNTS) is
THE_HANDLE : DC.GATEWAY_HANDLE := REOPEN (HANDLE, ACTION_ID);
C : RO.CONTEXT;
HAS_DESTROYED_GATEWAY : BOOLEAN;
S : SS.CONDITION;
THE_ACTION : ACTION.ID := ACTION_ID;
GATEWAY_OBJECT : constant DIR.OBJECT := GWO.DIRECTORY_OBJECT (THE_HANDLE);
GATEWAY_FULL_NAME : constant STRING :=
DIR.NAMING.GET_FULL_NAME (GATEWAY_OBJECT);
HOST : constant STRING := ASAP.DATA_HOST (THE_HANDLE);
MODEL : constant STRING := ASAP.DATA_CONTEXT (THE_HANDLE) &
UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (THE_HANDLE);
begin
PROFILE.SET (RESPONSE);
RO.ACQUIRE (A_CONTEXT => C,
STATUS => S,
MACHINE => HOST,
INSTANCE => ASA_DEFINITIONS.ASA);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
if not IS_UP_TO_DATE (THE_HANDLE, IN_CONTEXT => C) then
LOGGER.POSITIVE ("Accepting changes from model " & MODEL);
GWO.CLOSE (THE_HANDLE, S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
ACCEPT_CHANGES (GATEWAY_OBJECT => GATEWAY_OBJECT,
IN_CONTEXT => C,
MODEL => MODEL,
COMMENTS => "Automatic Accept_Changes issued by " &
"view copy" & GATEWAY_FULL_NAME,
WORK_ORDER => "<DEFAULT>",
ACTION_ID => ACTION_ID,
HAS_DESTROYED_GATEWAY => HAS_DESTROYED_GATEWAY);
end if;
RO.RELEASE (A_CONTEXT => C, STATUS => S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
ERRORS := (WARNINGS => 0, ERRORS => 0, FATAL => FALSE);
DO_NOT_COPY := FALSE;
exception
when PROFILE.ERROR =>
ERRORS := (WARNINGS => 0, ERRORS => 1, FATAL => FALSE);
DO_NOT_COPY := TRUE;
end PRE_CMVC_COPY;
procedure POST_CMVC_COPY (HANDLE : DC.GATEWAY_HANDLE;
SUBOBJECT : DIRECTORY.OBJECT;
SOURCE_OBJECT : DIRECTORY.OBJECT;
RELEASE : BOOLEAN;
CONTROLLED : BOOLEAN;
JOINED : BOOLEAN;
SOURCE_VIEW : DIRECTORY.OBJECT;
DESTINATION_VIEW : DIRECTORY.OBJECT;
FIRST_CALL : BOOLEAN;
RESPONSE : PROFILE.RESPONSE_PROFILE;
ACTION_ID : ACTION.ID;
ERRORS : in out DC.ERROR_COUNTS) is
THE_HANDLE : DC.GATEWAY_HANDLE := REOPEN (HANDLE, ACTION_ID);
ARCHIVE_FILE : DIIO.FILE_TYPE;
C : RO.CONTEXT;
S : SS.CONDITION;
type ACCESS_STRING is access STRING;
pragma SEGMENTED_HEAP (ACCESS_STRING);
CONTEXT : constant STRING := ASAP.DATA_CONTEXT (THE_HANDLE);
HOST : constant STRING := ASAP.DATA_HOST (THE_HANDLE);
MODEL : constant STRING := CONTEXT & UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (THE_HANDLE);
GATEWAY_OBJECT : constant DIR.OBJECT := GWO.DIRECTORY_OBJECT (THE_HANDLE);
ARCHIVE_FILE_NAME : constant STRING :=
DNA.GET_FULL_NAME (GATEWAY_OBJECT) & ".Archive";
REMOTE_TARFILE : constant STRING :=
UNIX.TEMPORARY_FILENAME (UNIX.TARFILE_EXTENSION);
CD_COMMAND : constant STRING := UNIX.CHANGE_DIRECTORY &
' ' &
CONTEXT;
TAR_COMMAND : constant STRING := UNIX.TAPE_ARCHIVE &
' ' &
UNIX.CREATE &
UNIX.ARCHIVE_FILE &
' ' &
REMOTE_TARFILE &
' ' &
MODEL;
RM_COMMAND : constant STRING := UNIX.REMOVE &
' ' &
REMOTE_TARFILE;
MY_STATE : ACCESS_STRING;
procedure PROCESS (STATE : in out ACCESS_STRING;
LINE : in STRING) is
begin
pragma ASSERT (STATE = null);
STATE := new STRING'(LINE);
pragma HEAP (JOB_SEGMENT.GET);
end PROCESS;
procedure EXECUTE_SCRIPT is
new ASAOPEN.EXECUTE (STATE_RECORD => ACCESS_STRING,
PROCESS => PROCESS);
begin
if RELEASE then
PROFILE.SET (RESPONSE);
--
-- Acquire a connection.
--
RO.ACQUIRE (A_CONTEXT => C,
STATUS => S,
MACHINE => HOST,
INSTANCE => ASA_DEFINITIONS.ASA);
LOGGER.STATUS (S);
--
-- Find the associated files.
--
EXECUTE_SCRIPT (IN_CONTEXT => C,
MODEL => MODEL,
TEMPLATE_NAME => ASSOCIATED,
STATE => MY_STATE,
STATUS => S);
LOGGER.STATUS (S);
--
-- Archive all the files, from the appropriate directory.
--
EXECUTE (COMMAND => CD_COMMAND &
UNIX.COMMAND_SEPARATOR &
TAR_COMMAND &
' ' &
MY_STATE.all,
INTERACTIVE => FALSE,
IN_CONTEXT => C,
TIMEOUT => DEFAULT_TIMEOUT);
--
-- Upload the tar file.
--
DIIO.CREATE (FILE => ARCHIVE_FILE,
MODE => DIIO.OUT_FILE,
NAME => ARCHIVE_FILE_NAME,
ACTION_ID => GWO.ACTION_ID (THE_HANDLE));
RO.GET (FROM_FILE => REMOTE_TARFILE,
IN_CONTEXT => C,
TO_FILE => ARCHIVE_FILE,
STATUS => S);
LOGGER.STATUS (S);
DIIO.CLOSE (FILE => ARCHIVE_FILE);
--
-- Delete the remote tarfile.
--
EXECUTE (COMMAND => RM_COMMAND,
INTERACTIVE => FALSE,
IN_CONTEXT => C,
TIMEOUT => DEFAULT_TIMEOUT);
--
-- Release the connection.
--
RO.RELEASE (A_CONTEXT => C, STATUS => S);
LOGGER.STATUS (S);
end if;
ERRORS := (WARNINGS => 0, ERRORS => 0, FATAL => FALSE);
exception
when PROFILE.ERROR =>
ERRORS := (WARNINGS => 0, ERRORS => 1, FATAL => TRUE);
end POST_CMVC_COPY;
procedure PRE_MAKE_CONTROLLED (HANDLE : DC.GATEWAY_HANDLE;
SUBOBJECT : DIRECTORY.OBJECT;
SAVE_SOURCE : BOOLEAN;
ALLOW_CONTROLLED : out BOOLEAN;
RESPONSE : PROFILE.RESPONSE_PROFILE;
ACTION_ID : ACTION.ID;
ERRORS : in out DC.ERROR_COUNTS) is
THE_HANDLE : DC.GATEWAY_HANDLE := REOPEN (HANDLE, ACTION_ID);
C : RO.CONTEXT;
HAS_DESTROYED_GATEWAY : BOOLEAN;
S : SS.CONDITION;
THE_ACTION : ACTION.ID := ACTION_ID;
GATEWAY_OBJECT : constant DIR.OBJECT := GWO.DIRECTORY_OBJECT (THE_HANDLE);
GATEWAY_FULL_NAME : constant STRING :=
DIR.NAMING.GET_FULL_NAME (GATEWAY_OBJECT);
HOST : constant STRING := ASAP.DATA_HOST (THE_HANDLE);
MODEL : constant STRING := ASAP.DATA_CONTEXT (THE_HANDLE) &
UNIX.CONTEXT_SEPARATOR &
ASAP.DATA_NAME (THE_HANDLE);
begin
PROFILE.SET (RESPONSE);
ALLOW_CONTROLLED := TRUE;
if SAVE_SOURCE then
LOGGER.NEGATIVE (ASA_DEFINITIONS.ASA &
" gateway objects cannot be source-controlled");
ERRORS := (WARNINGS => 0, ERRORS => 1, FATAL => FALSE);
else
RO.ACQUIRE (A_CONTEXT => C,
STATUS => S,
MACHINE => HOST,
INSTANCE => ASA_DEFINITIONS.ASA);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
if not IS_UP_TO_DATE (THE_HANDLE, IN_CONTEXT => C) then
LOGGER.POSITIVE ("Accepting changes from model " & MODEL);
GWO.CLOSE (THE_HANDLE, S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
ACCEPT_CHANGES (GATEWAY_OBJECT => GATEWAY_OBJECT,
IN_CONTEXT => C,
MODEL => MODEL,
COMMENTS => "Automatic Accept_Changes issued by " &
"Cmvc.Make_Controlled from object " &
GATEWAY_FULL_NAME,
WORK_ORDER => "<DEFAULT>",
ACTION_ID => ACTION_ID,
HAS_DESTROYED_GATEWAY => HAS_DESTROYED_GATEWAY);
if HAS_DESTROYED_GATEWAY then
LOGGER.WARNING ("The gateway object " & GATEWAY_FULL_NAME &
" has been destroyed while accepting " &
"changes. Cmvc.Make_Controlled is " &
"unable to proceed");
ACTION.FINISH (THE_ACTION => THE_ACTION, DO_COMMIT => TRUE);
ERRORS := (WARNINGS => 0, ERRORS => 0, FATAL => TRUE);
return;
end if;
end if;
RO.RELEASE (A_CONTEXT => C, STATUS => S);
LOGGER.STATUS (S, INTERACTIVE => TRUE);
ERRORS := (WARNINGS => 0, ERRORS => 0, FATAL => FALSE);
end if;
exception
when PROFILE.ERROR =>
ERRORS := (WARNINGS => 0, ERRORS => 1, FATAL => FALSE);
end PRE_MAKE_CONTROLLED;
procedure TERMINATE_SERVER (REASON : in DC.TERMINATION_CONDITION) is
begin
if REASON = DC.GATEWAY_CLASS_DEACTIVATED then
SWITCH_REGISTRATION.STOP;
end if;
end TERMINATE_SERVER;
end MODEL;