- Community Home
- >
- HPE Community, Japan
- >
- HP-UX
- >
- HP-UX General
- >
- getenv(3C)中にシグナル割り込みが発生した場合の動作
カテゴリ
Company
Local Language
フォーラム
ディスカッションボード
フォーラム
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
ディスカッションボード
ディスカッションボード
ディスカッションボード
ディスカッションボード
フォーラム
ディスカッションボード
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
フォーラム
ブログ
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-26-2004 10:34 PM
10-26-2004 10:34 PM
getenv(3C)中にシグナル割り込みが発生した場合の動作
開発中のアプリケーションで、プロセスのデッドロックが発生しました。このプロセスをSIGABROTでkillし、coreを開いたところ、getenv(3C)の処理中にシグナル(SIGALRM)を受信し、そのシグナルハンドラ内でまたgetenv(3C)を呼び出した箇所で固まっていたように見えています。
getenv()の処理中にシグナル割り込みし、さらにそのシグナルハンドラ内でgetenv()をコールすることは、デッドロックが発生する要因となりえるのでしょうか?
(その後テストプログラムを作成してこのような衝突を頻繁に繰り返してみましたが、再現していません)
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-27-2004 07:18 AM
10-27-2004 07:18 AM
getenv(3C)中にシグナル割り込みが発生した場合の動作
getenv: STW r2,-20(r30)
getenv+4: STW,MA r3,128(r30)
getenv+8: STW r4,-124(r30)
getenv+0xC: STW r5,-120(r30)
getenv+10: STW r6,-116(r30)
getenv+14: STW r7,-112(r30)
getenv+18: STW r8,-108(r30)
getenv+1C: STW r9,-104(r30)
getenv+20: STW r10,-100(r30)
getenv+24: ADDIL L%0xfffff800,r27,r1
getenv+28: LDW 1344(r1),r8
getenv+2C: COPY r26,r4
getenv+30: CMPB,= r0,r8,getenv+0x0044
# 何か条件をテストして、
getenv+34: LDI 0,r3
getenv+38: ADDIL L%0x4000,r27,r1
getenv+3C: B,L __thread_mutex_lock,r2
# __thread_mutex_lock()を呼び出している。
getenv+40: LDO 296(r1),r26
ということから、推測ですが、multi-threadの
プログラムの場合は、環境変数に関わる mutex を
ロックしてから実際の仕事をしているのでは。
( __thread_mutex_lock()の呼び出しの前にあるチェックは、multi-thread環境かどうかのチェックだと思います。)
そうだとすると、"getenv()の処理中にシグナルハンドラ内でまたgetenv()を呼び出したところ" というのは、この環境変数に関わる mutex を待っている部分では ?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-27-2004 09:47 AM
10-27-2004 09:47 AM
getenv(3C)中にシグナル割り込みが発生した場合の動作
> getenv()の処理中にシグナル割り込みし、さらにそのシグナル
> ハンドラ内でgetenv()をコールすることは、デッドロックが発
> 生する要因となりえるのでしょうか?
sigaction(2) に signal-catching functions から安全に呼べる
function (signal safe function) の list がありますが、 getenv()
はその中にありません。(signal unsafe)
そしてそこには
> when a signal interrupts an unsafe function and the signal-catching
> function calls an unsafe function, the behabior is undefined.
と書かれています。 signal handler で getenv() を使うことが問題
のようです。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-28-2004 08:49 AM
10-28-2004 08:49 AM
getenv(3C)中にシグナル割り込みが発生した場合の動作
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
10-28-2004 12:11 PM
10-28-2004 12:11 PM
getenv(3C)中にシグナル割り込みが発生した場合の動作
ちょっと見てみたらsignal unsafeな関数山盛りで泣きそうです(+_+)。ちょっとずつなおして行かなきゃ…。