パラレルmakeがハングする理由を調べてみる…再起動-バグ発見-

ようやく捕まえました根本原因。やはりバグはMSYS DLLにありました。
MSYSが動作している環境をMSYS DLL v1.0.17(先日はv1.17、v1.18と書いていましたが、v1.0.17、v1.0.18の方が正しいVer表記です orz)では、「非NT系OS or NT系OS」、「64bit or 32bit環境」ぐらいのざっくりとしたレベルで管理していましたが、MSYS DLL v1.0.18では「Win95相当、Win98相当、…、WinXP相当、Win7相当」、「64bit or 32bit環境」のように細かいレベルで管理するようになりました。さらに、この管理部分では、動作環境がサポートしている機能の概略も保持するように、エンハンスが行われています。この機能概略の部分で新規に「pipeの処理中に割り込み処理を行っても良いかどうかの元となる情報」が用意されたのですが、なにを勘違いしたのか、最終的に結果を求めたとき、真逆の応答をしています。
私はMinGW/MSYSをWindows 7(64bit)で動作させているため、本来ならばpipeの処理中に割り込み(シグナル)処理をしても良い環境なのですが、前述の通りMSYS DLLはpipeの処理中に割り込んでは駄目と勘違いしています。このため、pipeのread待ちをしている最中に子プロセスが終了した場合、MSYS DLLはCHLDシグナルの送信準備(ディスパッチ)はしますが、実際の割り込み処理(シグナルハンドラーに登録した処理の呼び出し)は保留したままになります。
パラレルmakeは、pipeのread待ちの最中にCHLDシグナルの割り込み(そしてreadの中断)を期待していますが、MSYS DLLがこの様な動作をしているため、pipeに対するreadが中断せず、ハングアップに陥ります。で、「pipeの処理中に割り込み処理を行っても良いかどうか」を正しく応答するように修正すると、パラレルmakeはハングアップせずに、正常に動作するようになりました。
修正方法はfixしているので、明日にはコンパイル方法なども含めた情報を提供出来ると思います。