[SCore-users-jp] MPICH+threadジョブ実行時に発生する不具合について
Keiichi Okazaki
k-okazaki @ pst.fujitsu.com
2004年 5月 25日 (火) 11:37:38 JST
SCore開発関係者様
富士通プライムソフトテクノロジの岡崎と申します。
お世話になります。
MPICH+threadジョブのチェックポイント/リスタートを行うと、
チェックポイント時点からのリスタート時にSIGSEGVが発生する
現象が起きています。
実行環境は、RedHat8.0 + SCore5.6.1 です。
SIGSEGVを回避するにはどうすればよいのでしょうか?
以下に、こちらで調査したことを記します。
----
score_syscall 内で__pthread_initial_thread_bos を
以前のスタック値へ書き換えてしまう処理があるようです。
----
(gdb) ni
0x080a0816 in read ()
(gdb) x __pthread_initial_thread_bos
0x8167c60 <score_ckpt_now_checkpointing+230584>: 0x000000ff
~~~~~~~~~ ※ここまでは正常
(gdb) ni ※1命令動かすと
0x080a081b in read ()
(gdb) x __pthread_initial_thread_bos
0xbfa00000: 0x00000000
~~~~~~~~~~ ※書き変わっている
0x80a0815 <read+129>: push %eax
0x80a0816 <read+130>: call 0x809fd70 <score_syscall> ★
0x80a081b <read+135>: add $0x20,%esp
-----
更に score_syscall の中を見てみると、
(score_syscall_nowrap)->__pthread_alt_unlock と呼び出されます。その
延長で __pthread_restart_new が呼び出されます。
__pthread_restart_new 内で自分自身にリスタートシグナルを送って
いるため、pthread_initialize が走ってしまい、
__pthread_initial_thread_bos を初期状態に戻してしまっているようです。
これによって、libpthread.a 内 errno.o :__errno_location()→
thread_self()内のスレッドディスクリプタ特定処理で失敗。
__errno_location() はヌルポインタを返却し、ここにerrnoを
書き込むことでSIGSEGVが発生しているようです。
----
以上、よろしくお願い致します。
--
------------------------------------------
岡崎
E-mail : k-okazaki @ pst.fujitsu.com
SCore-users-jp メーリングリストの案内