メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年2月25日月曜日

[Apache][CodeReading] Apache2.2.8コードリーディング25日目

今日もApache2.2.8コードリーディング。

やっとこさっとこデバッグログ実出力完了。
場所はApache起動直後の初期化部分。
allocator、poolの初期化が終わって、
apr_thread_mutex_createをしようかというところ。

その中で、apr_pcallocという関数がコールされているんだけど、
APR_POOL_DEBUGを有効にしてコンパイルすると
apr_pcallocの代わりにapr_pcalloc_debugという関数が呼ばれるようになる。
んで、この関数の中をいくと、デバッグログを出力するところがあるんだけど、
そこ。


今日読んだところは、

  • apr_file_write()/Apache2.2.8
  • apr_wait_for_io_or_timeout()/Apache2.2.8
  • APR_STATUS_IS_EINTRマクロ(その他)/Apache2.2.8
  • APR_STATUS_IS_EINTRマクロ(NETWARE)/Apache2.2.8
  • APR_STATUS_IS_EINTRマクロ(WIN32)/Apache2.2.8
  • APR_STATUS_IS_EINTRマクロ(OS2)/Apache2.2.8
  • SOCEINTRマクロ/Apache2.2.8
  • SOCBASEERRマクロ/Apache2.2.8
  • APR_EINTRマクロ/Apache2.2.8
  • apr_pollset_poll()(select)/Apache2.2.8
  • apr_pollset_poll()(poll)/Apache2.2.8
  • get_revent()(poll)/Apache2.2.8
  • apr_pollset_poll()(port)/Apache2.2.8
  • get_revent()(port)/Apache2.2.8
  • APR_EGENERALマクロ/Apache2.2.8
  • apr_pollset_poll()(kqueue)/Apache2.2.8
  • apr_time_usecマクロ/Apache2.2.8
  • apr_time_secマクロ/Apache2.2.8
  • APR_USEC_PER_SECマクロ/Apache2.2.8
  • APR_TIME_Cマクロ/Apache2.2.8
  • APR_INT64_Cマクロ/Apache2.2.8
  • get_kqueue_revent()/Apache2.2.8
らへん。

やっとapr_pollset_poll全種類読破。
そして、apr_pollset_pollが読み終わったことで、apr_wait_for_io_or_timeout()も終了。

今日のメインはapr_file_write。
apr_file_writeは、簡単に言うと、バッファリングありの出力と、バッファリングなしの出力をこなす。
バッファリングありかどうかは、apr_file_t構造体にそういう設定があるので、
その設定値によって決まる。

書き込み時にEAGAINやEWOULDBLOCKを伴ってエラーになった場合、
apr_wait_for_io_or_timeout()をコールする。
リソースが一時的に使用不可になっているので、使用可能になるまで待つ。

使用可能になるまで待つのだが、その後使用可能になったのにもかかわらず
また一時的にリソースが使用不可になると、出力バイト数を半分にしてしまう。
半分にしては書き込み、また半分にしては書き込み、というのを、書き込めるか、エラーが
発生するか、writeシステムコールが0を返すまで繰り返される。

通常のファイルの場合、出力予定バイト数が0にさえなれば、
writeシステムコールは0を返すのだが、特殊ファイルの場合は
下手をすると無限ループってことも有り得るじゃないかなー。
確か、特殊ファイルの場合の出力バイト数が0だったときの動作って
未定義だった気がする。

まぁ、それは置いといて、
apr_file_writeを使って書き込みをした場合、
書き込めたバイト数が、書き込みたいバイト数(パラメータに渡したバイト数)と
違っていた場合、リソースが頻繁に「一時的に使用不可」になっている
ということか。


明日はこのapr_file_writeを使っているところから読む予定。



おしまい。
.

0 コメント: