bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo C リファレンス > セクション 3c - C 関数 |
Tuxedo C リファレンス
|
名前
tpterm()−アプリケーションからの分離
形式
#include <atmi.h>
int tpterm(void)
機能説明
tpterm() は、BEA Tuxedo ATMI システム・アプリケーションからクライアントを削除します。クライアントがトランザクション・モードであると、トランザクションはロールバックします。tpterm() が正常に終了すると、呼び出し元は BEA Tuxedo ATMI クライアント操作を実行できません。未終了の会話はただちに切断されます。
tpterm() を 2 回以上呼び出した場合 (すなわち、呼び出し元がすでにアプリケーションから離れた後で呼び出した場合)、何も処理は行われず、正常終了を示す値が返されます。
マルチスレッド化およびマルチコンテキスト化の問題
適切なプログラミングでは、1 つを残して他のすべてのスレッドがコンテキストを終了または切り替えると、最後のスレッドが tpterm() 呼び出しを発行します。このようにプログラミングされていないと、残りのスレッドは TPINVALIDCONTEXT コンテキスト状態になります。次に、このコンテキストのセマンティクスを説明します。
複数のスレッドが関連するコンテキストにおいて、1 つのスレッドで tpterm() が呼び出されると、この tpterm() は以下のように動作します。
別のスレッドがコンテキストを終了したときに ATMI 呼び出し内でブロックされたスレッドがあると、そのスレッドは ATMI 呼び出しから異常終了によって返され、tperrno は TPESYSTEM に設定されます。また、このような異常終了の後で tperrordetail() が呼び出された場合、tperrordetail() は TPED_INVALIDCONTEXT を返します。
シングルコンテキストのアプリケーションでは、単一のスレッドが tpterm() を呼び出すと、すべてのスレッドのコンテキスト状態が TPNULLCONTEXT に設定されます。
それに対して、マルチコンテキストのアプリケーションでは、tpterm() が 1 つのスレッドで呼び出されると、同じコンテキスト内の他のすべてのスレッドは、ほとんどの ATMI 関数を呼び出しても異常終了し、tperrno が TPEPROTO に設定されるような状態になります。このような無効なコンテキスト状態で使用できる関数と使用できない関数のリストについては、C 言語アプリケーション・トランザクション・モニタ・インターフェイスについてを参照してください。無効なコンテキスト状態 (TPINVALIDCONTEXT) のスレッドが tpgetctxt() 関数を呼び出した場合、tpgetctxt() によってコンテキストのパラメータが TPINVALIDCONTEXT に設定されます。
TPINVALIDCONTEXT 状態を終了させるには、次の関数のどちらかを呼び出します。
TPINVALIDCONTEXT コンテキストを設定して tpsetctxt() を呼び出すことはできません。このような場合は、異常終了して tperrno が TPEPROTO に設定されます。呼び出し元とアプリケーションを関連させる必要がない tpsetunsol() 以外の ATMI 関数をスレッドが呼び出すと、ATMI 関数は NULL コンテキストで呼び出されたときと同じように動作します。任意通知型のスレッド通知を使用するクライアント・アプリーションは、tpterm() を明示的に呼び出して、任意通知型スレッドを終了する必要があります。
tpterm() 呼び出し後、スレッドは TPNULLCONTEXT コンテキスト状態になります。TPNULLCONTEXT コンテキストのスレッドで呼び出される ATMI 関数の多くは、暗黙的な tpinit() を実行します。tpinit() の呼び出しが成功するかどうかは、コンテキスト固有の問題やスレッド固有の問題ではなく、通常の要因によって決まります。
マルチスレッドのアプリケーション中のスレッドは、TPINVALIDCONTEXT を含め、どのコンテキスト状態で実行していても、tpterm() の呼び出しを発行できます。
戻り値
シングルコンテキストのアプリケーションで正常終了すると、このアプリケーションの現在のコンテキスト内のすべてのスレッドは、TPNULLCONTEXT 状態になります。
マルチコンテキストのアプリケーションで正常終了すると、呼び出し側のスレッドは TPNULLCONTEXT 状態になり、呼び出し側のスレッドと同じコンテキスト内の他のスレッドはすべて TPINVALIDCONTEXT 状態になります。後者のスレッドのコンテキスト状態は、引数 context を TPNULLCONTEXT か別の有効なコンテキストに設定して tpsetctxt() を実行すれば変更できます。
異常終了すると、tpterm() は呼び出し側のプロセスを元のコンテキスト状態のままで -1 を返し、tperrno を設定してエラー条件を示します。
エラー
異常終了時には、tpterm() は tperrno を次のいずれかの値に設定します。
関連項目
tpinit(3c)、tpgetctxt(3c)、tpsetctxt(3c)、tpsetunsol(3c)
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |