bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo C リファレンス > セクション 3c - C 関数 |
Tuxedo C リファレンス
|
名前
tpsuspend()−グロ―バル・トランザクションの中断
形式
#include <atmi.h>
int tpsuspend(TPTRANID *tranid, long flags)
機能説明
tpsuspend() を使用して、呼び出し元のプロセス内でアクティブなトランザクションを中断します。tpbegin() により開始したトランザクションは、tpsuspend() で中断できます。中断を行ったプロセスまたは他のプロセスのいずれかが tpresume() を使用して、中断されたトランザクション上の作業を再開できます。tpsuspend() が復帰すると、呼び出し元はトランザクション・モードではなくなります。ただし、トランザクションが中断されている間、トランザクションに関連するすべてのリソース (データベース・ロックなど) は、アクティブなままです。アクティブなトランザクションと同様に、中断されたトランザクションは、それが開始されたときに割り当てられたトランザクション・タイムアウトの値に影響されます。
トランザクションを別のプロセスで再開するには、tpsuspend() の呼び出し元が明示的に tpbegin() を呼び出すことによってトランザクションを起動している必要があります。tpsuspend() は、トランザクションの開始元以外のプロセスから呼び出すこともできます (たとえば、トランザクション・モードで要求を受信するサーバ)。後者の場合、tpsuspend() の呼び出し元のみ tpresume() を呼び出してトランザクションを再開することができます。これは、プロセスが一時的にトランザクションを中断して、そのトランザクションを完了する前に別のトランザクションを開始し、処理するのに使用できます (たとえば、エラー・ログをとるトランザクションを実行してから元のトランザクションに戻る)。
tpsuspend() は、中断されているトランザクションの識別子を、tranid で指される領域に返します。呼び出し元は tranid が指す空間を割り当てなければなりません。tranid が NULL の場合はエラーです。
正常終了するためには、呼び出し元は tpsuspend() を実行する前に、サーバとの未終了のコミュニケーションを全て完了していなければなりません。すなわち、呼び出し元は、呼び出し元のトランザクションに関連のある tpacall() で送出した要求に対する応答を、すべて受け取っていなければなりません。また、呼び出し元は、呼び出し元のトランザクションに関連のある会話型サービスとの接続を、全てクローズしていなければなりません (つまり、tprecv() は TPEV-SVCSUCC イベントを返していなければなりません)。この規則のいずれかが守られない場合には、tpsuspend() は異常終了し、呼び出し元の現在のトランザクションは中断されず、トランザクション・コミュニケーションの記述子は有効なままです。呼び出し元のトランザクションに関連しないコミュニケーション記述子は、tpsuspend() の結果に関係なく有効なままです。
flags は将来使用するために予約されており、0 に設定されます。
マルチスレッドのアプリケーションの場合、TPINVALIDCONTEXT 状態のスレッドは、tpsuspend() の呼び出しを発行できません。
戻り値
tpsuspend() はエラーの場合は -1 を返し、tperrno を設定してエラー条件を示します。
エラー
次の条件の場合、tpsuspend() は異常終了し、tperrno を次の値に設定します。
関連項目
tpacall(3c)、tpbegin(3c)、tprecv(3c)、tpresume(3c)
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |