0

私の環境:

  • FreeBSD 9.1 と、事前にフォークされたマルチプロセス環境を手に入れました。
  • 主なプロセス、ワーカーを管理するためのポーラー (ビジーか利用可能かを決定するため) とワーカー。

SIGTERMワーカーの数が多くなければ、メイン プロセスに送信しても問題ありません。high (x > 20)セグフォルトが発生した場合。

2 つのトラス出力を取得しました。1 つは通常の出口で、もう 1 つはセグメント フォールトです。

コアファイルの gdb 出力:

Die: DW_TAG_unspecified_type (abbrev = 62, offset = 1535499)
    has children: FALSE
    attributes:
        DW_AT_name (DW_FORM_strp) string: "decltype(nullptr)"
Dwarf Error: Cannot find type of die [in module /usr/local/lib/gcc46/libstdc++.so.6]
Die: DW_TAG_unspecified_type (abbrev = 62, offset = 1535499)
    has children: FALSE
    attributes:
        DW_AT_name (DW_FORM_strp) string: "decltype(nullptr)"
Dwarf Error: Cannot find type of die [in module /usr/local/lib/gcc46/libstdc++.so.6]

通常の終了プロセスのトラス出力:

> close(0)                                         = 0 (0x0) close(7)   
> = 0 (0x0) gettimeofday({1360957175.665250 },0x0)           = 0 (0x0) write(5,"2013-02-15 21:39:35.665 [64591] "...,64) = 64 (0x40) close(5)
> = 0 (0x0)
> 
> sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x
> 0) = 0 (0x0)
> 
> sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)
> 
> .............. .............. so many same sigprocmask call
> 
> 
> sigprocmask(SIG_BLOCK,SIGHUP|SIGINT|SIGQUIT|SIGKILL|SIGPIPE|SIGALRM|SIGTERM|SIGURG|SIGSTOP|SIGTSTP|SIGCONT|SIGCHLD|SIGTTIN|SIGTTOU|SIGIO|SIGXCPU|SIGXFSZ|SIGVTALRM|SIGPROF|SIGWINCH|SIGINFO|SIGUSR1|SIGUSR2,0x
> 0) = 0 (0x0)
> sigprocmask(SIG_SETMASK,0x0,0x0)                 = 0 (0x0)
> process exit, rval = 0

seg fault を持つプロセス:

> gettimeofday({1360954514.547064 },0x0)           = 0 (0x0)
> write(5,"2013-02-15 20:55:14.547 [7580] I"...,63) = 63 (0x3f)
> close(5)                                         = 0 (0x0)
> SIGNAL 11 (SIGSEGV)
> process exit, rval = 0

プロセスが sigprocmask を呼び出そうとすると、seg fault が発生します。私は sigprocmask を明示的に呼び出しておらず、sigprocmask への呼び出しの競合状態が疑われます。sigprocmask に関連する競合状態に遭遇しましたか?

4

1 に答える 1