Thanks. Your understanding is correct. For cases, when ngx_http_read_client_request_body returns NGX_AGAIN, thread returns and request will get finalized. I'll go ahead and move reading contents of r and request body to main thread in the content handler and just keep execution of our business logic on thread.
Just one more question - Once I move ngx_http_read_client_request_body in content handler on main thread and it returns NGX_AGAIN, how should I handle it? Code sample on nginx developer reference, recommends this.
ngx_int_t
ngx_http_foo_content_handler(ngx_http_request_t *r)
{
ngx_int_t rc;
rc = ngx_http_read_client_request_body(r, ngx_http_foo_init);
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
/* error */
return rc;
}
return NGX_DONE;
}