diff src/os/unix/ngx_files.c @ 6441:9fd738b85fad

Threads: task pointer stored in ngx_file_t. This simplifies the interface of the ngx_thread_read() function. Additionally, most of the thread operations now explicitly set file->thread_task, file->thread_handler and file->thread_ctx, to facilitate use of thread operations in other places. (Potential problems remain with sendfile in threads though - it uses file->thread_handler as set in ngx_output_chain(), and it should not be overwritten to an incompatible one.) In collaboration with Valentin Bartenev.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 18 Mar 2016 06:43:52 +0300
parents 3832b608dc8d
children 6e10518f95d8
line wrap: on
line diff
--- a/src/os/unix/ngx_files.c
+++ b/src/os/unix/ngx_files.c
@@ -88,8 +88,8 @@ typedef struct {
 
 
 ssize_t
-ngx_thread_read(ngx_thread_task_t **taskp, ngx_file_t *file, u_char *buf,
-    size_t size, off_t offset, ngx_pool_t *pool)
+ngx_thread_read(ngx_file_t *file, u_char *buf, size_t size, off_t offset,
+    ngx_pool_t *pool)
 {
     ngx_thread_task_t      *task;
     ngx_thread_read_ctx_t  *ctx;
@@ -98,7 +98,7 @@ ngx_thread_read(ngx_thread_task_t **task
                    "thread read: %d, %p, %uz, %O",
                    file->fd, buf, size, offset);
 
-    task = *taskp;
+    task = file->thread_task;
 
     if (task == NULL) {
         task = ngx_thread_task_alloc(pool, sizeof(ngx_thread_read_ctx_t));
@@ -108,7 +108,7 @@ ngx_thread_read(ngx_thread_task_t **task
 
         task->handler = ngx_thread_read_handler;
 
-        *taskp = task;
+        file->thread_task = task;
     }
 
     ctx = task->ctx;