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

2008年2月24日日曜日

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

今日もひらメソッドにてApache2.2.8コードリーディング。

今日読んだところは

  • apr_pollset_poll()(epoll)/Apache2.2.8
  • APR_RING_CONCATマクロ/Apache2.2.8
  • get_epoll_revent()/Apache2.2.8
  • apr_get_netos_errorマクロ(その他)/Apache2.2.8
  • apr_get_netos_errorマクロ(netware)/Apache2.2.8
  • apr_get_netos_errorマクロ(win32)/Apache2.2.8
  • apr_get_netos_errorマクロ(os2)/Apache2.2.8
  • apr_pollset_poll()(os2)/Apache2.2.8
  • sock_errnoマクロ/Apache2.2.8
  • apr_os2_sock_errno()/Apache2.2.8
  • APR_FROM_OS_ERRORマクロ/Apache2.2.8
  • APR_OS_START_EAIERRマクロ/Apache2.2.8
  • make_pollset()/Apache2.2.8
らへん。
pollしているところ。

場所はApacheの初期化部。
APR_POOL_DEBUGでAPR_POOL_DEBUG_VERBOSE_ALLOCをしている場合でDEBUGログを出力しようとしているところ。出力終わるのをpollして待っている感じ(だっけ?)。

apr_pollset_poll()(epoll版)
今日読んだ中では、まあ一番面白いかなぁ。
といっても、epoll_waitしているだけ。

面白いのはepollじゃなくて、やはりリング部。

apr_pollset_addなんかで、ファイルディスクリプタを監視対象に追加するんだけど、
その追加に失敗した場合、pfd_elem_t領域をdead_ringにつないでおく。

このapr_pollset_pollの中で、epoll_waitが終わると、
dead_ringにつないでいた失敗時に作成したpfd_elem_tをfree_ringにつなぎ、
当のdead_ringは空にセット。

うーむ。なるほど。
ここでdead_ringをfree_ringにつなぎなおすのね。

次に同じapr_pollset_tを使用して
apr_pollset_add等をすると、
このfree_ringからpfd_elem_t領域が取得される。

ふーん。

今日はこんだけ。

おしまい。
.

0 コメント: