結局ResetEventしたりタイムアウト設定したりしなくても、CreateEvent()のbManualResetフラグをfalseにするだけで良いみたい。
インストーラはW2Kに対応していないが、WDKさえ動けば、W2K用のバイナリは簡単に作成、インストールできる。XPかVistaにWDKをインストールして、それのWindows2000のビルド環境から、淺川さんとこのHow to build Dokan libraryの手順に従ってビルド、それをW2Kにコピー、インストールするだけだった。
単にResetEventを追加しただけだと、Windowsが勝手にスケジューリングしてしまい、長時間待たされることがある。WaitForSingleObjectのタイムアウト設定が必要みたい。
WaitForSingleObject(g_DispatchEvent, 100);
0.1秒くらいだとCPU負荷もほぼ0%で具合が良いみたい。
きのうWaitForSingleObject(g_DispatchMutex, INFINITE);をコメントアウトしてしまったが、これはいけない。複数スレッドが同時にアクセスしたら、やばいことになる。で、単に
ResetEvent(g_DispatchEvent);
の追加だけで良いだろう。
わかった。CPU負荷の件はDR_DispatchAndWaitでSetEvent(g_DispatchEvent)したのをDR_Dispatch()でRestEventしていなかったせいだった。
$ diff -u dokan_lib.c.org dokan_lib.c
--- dokan_lib.c.org Tue Sep 16 00:49:13 2008
+++ dokan_lib.c Tue Sep 16 00:39:37 2008
@@ -1787,7 +1787,7 @@
{
while(TRUE) {
WaitForSingleObject(g_DispatchEvent, INFINITE);
- WaitForSingleObject(g_DispatchMutex, INFINITE);
+// WaitForSingleObject(g_DispatchMutex, INFINITE);
fprintf(stderr, "eventloop ");
while(!IsListEmpty(&g_EventQueue)) {
PLIST_ENTRY listEntry = RemoveHeadList(&g_EventQueue);
@@ -1815,6 +1815,7 @@
}
}
}
+ ResetEvent(g_DispatchEvent);
ReleaseMutex(g_DispatchMutex);
}
}
多分これで良いだろう。しばらく様子見て淺川さんにレポートしよう。
swin対応は、ネイティブスレッドを使っているため、イベントループを根本的にいじらなくてはいけないので、そう簡単にはいきそうもない。でも結構用途がありそうなのでやってみたいなぁ。
いくらか手を入れたが、とりあえずVista(32)上のMinGWでビルドに成功した。ASRでもちゃんと動く(はず)。W2K上のVC71でもコンパイルできるが、残念ながらdokanがW2Kにはインストールできない。
次のステップであるswin/vruby対応してからパッチを公開しよう。
なかださんところで、sshfsがよさげということで、鯖の管理に使えそうなので、リンクをたどってみた。
びっくりした。これを動かすためのDokanライブラリは、Windows版FUSEじゃないですかー。しかもドライバは64bit版Vistaのコードサイニング証明書を取得している!!
おまけにRubyの拡張ライブラリも作られている。いや、これはすばらしい。いろんなことができそうだ。
ただし、開発途中とのことで、不具合もいくらかある。なかださんのところで書かれていることの他に、
なんてところだろうか。dokan_libは、コードを眺めていると、イベントループがコンソールベースらしいので、いずれswin用のパッチを作るつもり。そうすればCPU負荷の問題は解決できるはずだし、タスクトレーに常駐するアプリケーションなんか簡単に作れるはず。
とうとう玄鯖のディスクが異音を発して、ネットワークはじめ外部ににつながらなくなってしまった。今回は電源を引っこ抜く→再投入で元に戻ったが、非常にやばい状況。とりあえず今あるデータはバックアップした。
ARTiGOの購入はグッドタイミングだったな。
日本語でWindowsからsysylinux使ってUSBにブート可能なインストールイメージを作る方法を書いたサイトが見当たらなかったので、メモ。ま、USB-CDROMは持っているのだが、それじゃおもしろくないから、USBメモリからインストールしてみた。
WindowsマシンからUSBメモリにubuntu-serverのブートイメージを作る方法
この方法だと、GFXBOOTのイメージが画面に出ないが、なに、そんなのはどうでもいいことだ。逆に日本語でも101キーをちゃんとインストールしてくれるので、おいらとしてはこの方が良い。(ubuntu-serverのCDインストーラは、言語に日本語を選択すると106キーを強制してしまい、101キーに戻すのが厄介だという問題がある)
あ、memtest86+は別途ほかのUSBメモリに作る必要があるかも。このマザーボードはメモリの相性がシビアらしいので、インストール前にmemtest86+しておいたほうが良い。おいらは一枚ノーブランドの1Gを捨ててしまった。
しばらく遊んでたけど、とうとうFirefoxが立ち上がらなくるとか、x64でSP2入れたらWindowsUpdateできなくなるとか、制限ユーザーでログオンできなくなるとか、PowerShellのドキュメントが読めなくなるとか、いろんな不具合が一気に噴出中。
だめだこりゃ。
あ、地震だ。
_ nyasu3w [しかもsshも繋がりません]
_ 雪見酒 [ありゃ、ほんとだ。]