フィルタの勉強: フィルタの呼び出しとストリームの終わり

static apr_status_t hogehoge_filter(ap_filter_t *f, apr_bucket_brigade *bb) {
  request_rec *r = f->r;
  my_ctx *ctx = f->ctx;

いくつかのフィルタのコードを読んでみると、どうも一回のフィルタの呼び出しではストリームが終わらないことがあるらしい。だから、ステータスをf->ctxに保持する。

ctxはリクエストごとに初期化されるように見える。だから

  1. if (!ctx) { 〜 }で存在チェック
  2. ctxがなかったら、ctxを生成して、ストリームが始まったものとして処理をする
  3. ctxがあったら、ストリームの途中として処理をする

ctxApacheがてきとーに破棄してくれてるのかな?