diff options
author | Igor Sysoev <igor@sysoev.ru> | 2019-11-14 16:39:48 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2019-11-14 16:39:48 +0300 |
commit | 57e326b4119863f737d8677adc69dc53c7e4ed27 (patch) | |
tree | f80e27a6ea8ed77bbfa8d94ce5c3b98b42e5188b /src/nxt_event_engine.c | |
parent | 643c433f8eb72cfe7d29d4f624888df646480477 (diff) | |
download | unit-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.c | 14 |
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); } |