今日もひらメソッドにて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 コメント:
コメントを投稿