summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_event_engine.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2019-11-14 16:39:48 +0300
committerIgor Sysoev <igor@sysoev.ru>2019-11-14 16:39:48 +0300
commit57e326b4119863f737d8677adc69dc53c7e4ed27 (patch)
treef80e27a6ea8ed77bbfa8d94ce5c3b98b42e5188b /src/nxt_event_engine.c
parent643c433f8eb72cfe7d29d4f624888df646480477 (diff)
downloadunit-57e326b4119863f737d8677adc69dc53c7e4ed27.tar.gz
unit-57e326b4119863f737d8677adc69dc53c7e4ed27.tar.bz2
Introduced chained buffer completion handlers.
Diffstat (limited to 'src/nxt_event_engine.c')
-rw-r--r--src/nxt_event_engine.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/nxt_event_engine.c b/src/nxt_event_engine.c
index c46158b7..6f051067 100644
--- a/src/nxt_event_engine.c
+++ b/src/nxt_event_engine.c
@@ -721,7 +721,7 @@ void
nxt_event_engine_buf_mem_completion(nxt_task_t *task, void *obj, void *data)
{
nxt_event_engine_t *engine;
- nxt_buf_t *b, *parent;
+ nxt_buf_t *b, *next, *parent;
b = obj;
parent = data;
@@ -729,9 +729,17 @@ nxt_event_engine_buf_mem_completion(nxt_task_t *task, void *obj, void *data)
nxt_debug(task, "buf completion: %p %p", b, b->mem.start);
engine = b->data;
- nxt_event_engine_buf_mem_free(engine, b);
- nxt_buf_parent_completion(task, parent);
+ do {
+ next = b->next;
+ parent = b->parent;
+
+ nxt_event_engine_buf_mem_free(engine, b);
+
+ nxt_buf_parent_completion(task, parent);
+
+ b = next;
+ } while (b != NULL);
}