[Namazu-devel-ja 1144] Re: Windows 版 Namazu の SUICIDE_TIME の不具合について
Tadamasa Teranishi
yw3t-trns @ asahi-net.or.jp
2006年 8月 2日 (水) 14:37:54 JST
寺西です。
NOKUBI Takatsugu wrote:
>
> 一度MingWでw3mを動くよういろいろいじってみたのですが、Windowsでの
> signalまわりはUnixのようとはとてもいえないですね。
そうです。かなりの廉価版です。
> > とりあえず 「Namazu: セキュリティに関する考察」のページには UNIX
> > 限定と書いて、namazurc-sample のコメントに UNIX Only と書き加え
> > ましょうか。
>
> 現状ではそれがいいですね。
ですね。
> > B. 現在の処理をスレッドで実行する場合。
> > といったところでしょうか。いずれにしても UNIX と Windows で随分
> > 違うのが嫌ですね。
>
> どちらもちょっと大変ですね... 私にはWindows nativeなコードはとてもか
> けそうにないです。
現在は以下の構造なので、
main()
{
:
signal();
alarm();
/* partA */
alarm();
/* partB */
return 0;
}
こんな感じでスレッドにすれば良いのではないかと思うのですが、実装する
にしても、やっぱり次期 2.2系でしょうね。
main()
{
:
#if defined(_WIN32) && defined(__MINGW32__)
hThread = CreateThread(); /* partA */
dwTimeout = suicide_time * 1000;
if (WaitForSingleObject(hThread, dwTimeout) == WAIT_TIMEOUT) {
CloseHandle(hThread);
suicide_time(SIGALRM);
}
GetExitCodeThread(hThread, &dwExitCode);
CloseHandle(hThread);
if (dwExitCode != 0) {
/* error */
return dwExitCode;
}
hThread = CreateThread(); /* partB */
dwTimeout = suicide_time * 1000;
if (WaitForSingleObject(hThread, dwTimeout) == WAIT_TIMEOUT) {
CloseHandle(hThread);
suicide_time(SIGALRM);
}
GetExitCodeThread(hThread, &dwExitCode);
CloseHandle(hThread);
if (dwExitCode != 0) {
/* error */
return dwExitCode;
}
#else
signal();
alarm();
partA();
alarm();
partB();
#endif
return 0;
}
フィルタの外部プロセスのタイムアウトもいっしょに考えるのが良いのかも
しれません。
> > 個人的には Web サーバの設定で CGI のタイムアウトを設定すれば
> > なくても良いかなとは思っているのですが。
>
> こちらの方法を推奨するようWebに書いておくのがいいのでしょうかね。
SUICIDE_TIME って保険みたいなものですからね。
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns @ asahi-net.or.jp
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E
Namazu-devel-ja メーリングリストの案内