void h2o_mruby_send_chunked_close(h2o_mruby_generator_t *generator) { h2o_mruby_chunked_t *chunked = generator->chunked; /* run_fiber will never be called once we enter the fast path, and therefore this function will never get called in that case */ assert(chunked->type == H2O_MRUBY_CHUNKED_TYPE_CALLBACK); close_body_obj(generator); if (!chunked->sending.inflight) do_send(generator, &chunked->callback.receiving, 1); }
void h2o_mruby_send_chunked_dispose(h2o_mruby_generator_t *generator) { h2o_mruby_chunked_t *chunked = generator->chunked; h2o_doublebuffer_dispose(&chunked->sending); switch (chunked->type) { case H2O_MRUBY_CHUNKED_TYPE_CALLBACK: h2o_buffer_dispose(&chunked->callback.receiving); close_body_obj(generator); break; case H2O_MRUBY_CHUNKED_TYPE_SHORTCUT: /* note: no need to free reference from chunked->client, since it is disposed at the same moment */ if (chunked->shortcut.remaining != NULL) h2o_buffer_dispose(&chunked->shortcut.remaining); break; } }