TRESTARTコマンドは、現在のトランザクションのRESTARTを試みます。そのTSTARTが最初に実行された時に、RESTARTは、最初のTSTARTに戻って制御を移行し、それが何であったかについて多くのプロセスの状態を復元します。トランザクションが進行中でない時($TLEVEL= 0)、または、トランザクションが有効なRESTARTを持たない時、発行されたTRESTARTは、エラーを生成します。
TRESTARTコマンドは、GT.Mがリソースの競合の場合にトランザクションを暗黙的に再起動するのと同じ方法で、TPトランザクションをRESTARTにします。すべての再起動は、内部トランザクションの再試行回数を最大3回増やします。その時点で、GT.Mは、トランザクションで参照されるすべてのデータベースのクリティカル・セクション内でTPトランザクション全体を実行します。
GT.Mは、アプリケーション・コードが、$TRESTART=4の間にトランザクション中に複数回 TRESTARTを試行しているときに TRESTMAX ランタイムエラーを発行します(注:健全であるためには、アプリケーション・コード内のTRESTARTの使用は常に条件付きでなければなりません)。最後の再試行では、GT.Mはトランザクションに関与するすべてのデータベース上のクリティカル・セクション・ロックを保持します。TRESTARTは、現在のトランザクションで行われたすべての作業をキャンセルし、制御をTSTARTに戻すので、最後の再試行でこれを実行できる回数を制限することで(データベースに対するクリティカルセクションのロックを保持することにより)、プロセスが他のプロセスがデータベースを更新できないようにすることができます。
GT.Mは、同様の方法でM-ロックの非可用性のために、最終の再試行でTPの再開を制限します。GT.Mでは最大16回の再起動が可能で、その後にTPLOCKRESTMAXランタイムエラーが発行されます。
TRESTARTコマンドのフォーマットは次のとおりです。
TRE[START][:tvexpr]
オプションでコマンド直後に続く真理値の式は、GT.Mがコマンドを実行するかどうかをコントロールする後置コマンドです。
TRESTARTは引数を持たないので、行の中で次のコマンドと区別するために、コマンドに続き少なくとも2つのスペースが必要です。
TRESTART(および暗黙のRESTART)は、任意のデバイスの状態を復元しません; GT.MがTSTARTの初期化を実行した時に、それらが持っていた状態に従って復元をします。
$TEST
現在のベースのトランザクションとそのサブトランザクションのいくつかによって変更されたすべてのグローバル変数
ネイキッドインジケータ
プロセスが保持するLOCK
割込み(つまり、$ZININTERRUPTが1)に応答して $ZINTERRUPT を実行している間に、かつ、エラー処理が有効な(つまり$ ECODE'="")間に、TP RESTART が、暗黙的または明示的のいづれかで、TPRESTNESTERR エラーを発生させてネストされたエラー処理が行われます。これは、M仮想マシンフレームを不完全に処理されたエラーの発生箇所に戻してスタック解除し、そのフレームをスタック解除し、エラーを再投入します。
それらは、また、それらが最初に命名されていた時にそれらが持っていた値に、1つ以上のアクティブなTSTARTによって名付けられたローカル変数を復元します。
TRESTARTコマンドの使用例については、第5章: “"Mの一般的な言語特徴"” を参照してください。