メインスレッドがすーっと音もなくいなくなる問題
Mosh で特定のマルチスレッドプログラムにおいて、メインスレッドが音もなくいなくなる問題に遭遇。
SEGV や Signal ではない。
デバッグに苦慮していたのだが、kosaki さんに
普通、痕跡を残さないのはexitかassert経由のabort。そのへんにブレークポイントはってみたら?
とアドバイスを頂いた。
アドバイスは的中。 assert で exit してた。
なぜ痕跡が無かったかというと
assert の直前に stderr/stdout が close されていたから。
そもそも
- stderr/stdout が close されるのはバグ
- そういったありえない事態を検知するために assert を入れていた
のだが、よく考えれば assert は stderr がなかったらつらいよなあ。
そんなわけで、ようやくまともに動いてきた。結果的には、ほとんどの問題が static 周りだった。
- static initializer
- static char buf[N]
とか。static がトラウマになりそうだ。