彷徨えるフジワラ

年がら年中さまよってます

Cygwin/Windows の DLL 挙動で嵌る

DTrace Day 2001.03 を挟んだ怒涛の DTrace 三昧状態がやっと一段落したので、作業保留になっていた Mercurial 1.5.1 のメッセージ翻訳作業に着手。

ところが、確認作業のために 1.5.1 版をソースからビルドしようとすると:

.... died waiting for dll loading ....

などとメッセージを出力して、Python を使った処理が一向に進まない。

しかも、現象に再現性はあるものの、発生するタイミングが一定しない。
21世紀初頭は Cygwin も DLL 周りの実行時問題が結構あったのだけれど、最近はすっかり見なくなってたのになぁ、などという妙な感慨が。

「エンジニア的には、それってどうよ?」という対処方法だけど、とりあえず再起動.... 解決しない。

更に更に「エンジニア的には、それってどうよ?」という対処方法だけど、Cygwin の update をしてみる....解決しない。

しょうがないので google にお伺いを立ててみる。検索を始めるまでの順番がアレしているところが、2.0 度の低いところなんだろうなぁ > 自分

検索した結果、fork() システムコールにまつわるトラブルらしいとの情報を入手。

でもこれ、2005 年の記事だよね?今まで全然問題なかったんだけどなぁ。あ、ひょっとして、先日の再起動の際に Windows Update が走ってたから、それで何かが書き換わったか?しかし、「fork() が問題」なのだとしたら、コマンド起動をしまくっている make とか bash こそ被害にあう筈じゃねぇ?

などと思いつつ、Cygwin 環境の /usr/share/doc/Cygwin/rebase-3.0.1.README を読んだところ、どうやら fork() した後の DLL 配置の問題らしい。あぁ、make や bash は fork() しても即 exec() だから、DLL 配置なんて関係無いよな、確かに。

で、rebase-3.0.1.README の仰せのままに、cygwin コマンド類を全部終了させてから、ash 上で rebaseall を実行。そして改めて Mercurial のソースビルドを実行..... 上手く行った!

それにしても、何ゆえ今頃この症状が出るかねぇ? Windows Update は結構まめに実施しているから、今までパッチがあたってなかった、なんてことは無い筈なのだが....