diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2016-03-18 06:44:03 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2016-03-18 06:44:03 +0300 |
commit | 10c8c8d6a47db5e84825479438ce5848b2d1dda4 (patch) | |
tree | 138823fa36c8dd88561aa8da309fa062ec597eba /src/core/ngx_file.c | |
parent | ac78b26324a348ebdd108de0c022729b671549fb (diff) | |
download | nginx-10c8c8d6a47db5e84825479438ce5848b2d1dda4.tar.gz nginx-10c8c8d6a47db5e84825479438ce5848b2d1dda4.zip |
Threads: offloading of temp files writing to thread pools.
The ngx_thread_write_chain_to_file() function introduced, which
uses ngx_file_t thread_handler, thread_ctx and thread_task fields.
The task context structure (ngx_thread_file_ctx_t) is the same for
both reading and writing, and can be safely shared as long as
operations are serialized.
The task->handler field is now always set (and not only when task is
allocated), as the same task can be used with different handlers.
The thread_write flag is introduced in the ngx_temp_file_t structure
to explicitly enable use of ngx_thread_write_chain_to_file() in
ngx_write_chain_to_temp_file() when supported by caller.
In collaboration with Valentin Bartenev.
Diffstat (limited to 'src/core/ngx_file.c')
-rw-r--r-- | src/core/ngx_file.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c index 3ebd73d8b..2dc222865 100644 --- a/src/core/ngx_file.c +++ b/src/core/ngx_file.c @@ -124,6 +124,15 @@ ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain) } } +#if (NGX_THREADS && NGX_HAVE_PWRITEV) + + if (tf->thread_write) { + return ngx_thread_write_chain_to_file(&tf->file, chain, tf->offset, + tf->pool); + } + +#endif + return ngx_write_chain_to_file(&tf->file, chain, tf->offset, tf->pool); } |