From 166ec03f0f7e43e966eece8f8f8f44c8d8b0ff09 Mon Sep 17 00:00:00 2001 From: Alexander Borisov Date: Thu, 26 Dec 2019 15:31:54 +0300 Subject: [PATCH] Fixed njs_vm_handle_events(). Fixed typo introduced in 61bf7a31e685. Event loop is expected to process two queues: posted events and promise events according to the spec. The "do while" loop was introduced to handle possible promise events which may appear as a result of posted events processing. The loop termination condition should check for emptyness of promise events queue, because posted events can only be created outside the loop (externally). --- src/njs_vm.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/njs_vm.c b/src/njs_vm.c index 13b3ae76..ffcd39b6 100644 --- a/src/njs_vm.c +++ b/src/njs_vm.c @@ -493,16 +493,17 @@ njs_vm_handle_events(njs_vm_t *vm) { njs_int_t ret; njs_event_t *ev; - njs_queue_t *events; + njs_queue_t *promise_events, *posted_events; njs_queue_link_t *link; - do { - events = &vm->promise_events; + promise_events = &vm->promise_events; + posted_events = &vm->posted_events; + do { for ( ;; ) { - link = njs_queue_first(events); + link = njs_queue_first(promise_events); - if (link == njs_queue_tail(events)) { + if (link == njs_queue_tail(promise_events)) { break; } @@ -516,12 +517,10 @@ njs_vm_handle_events(njs_vm_t *vm) } } - events = &vm->posted_events; - for ( ;; ) { - link = njs_queue_first(events); + link = njs_queue_first(posted_events); - if (link == njs_queue_tail(events)) { + if (link == njs_queue_tail(posted_events)) { break; } @@ -542,7 +541,7 @@ njs_vm_handle_events(njs_vm_t *vm) } } - } while (!njs_queue_is_empty(events)); + } while (!njs_queue_is_empty(promise_events)); return njs_posted_events(vm) ? NJS_AGAIN : NJS_OK; } -- 2.47.3