]> git.kaiwu.me - njs.git/commitdiff
Fixed njs_vm_handle_events().
authorAlexander Borisov <alexander.borisov@nginx.com>
Thu, 26 Dec 2019 12:31:54 +0000 (15:31 +0300)
committerAlexander Borisov <alexander.borisov@nginx.com>
Thu, 26 Dec 2019 12:31:54 +0000 (15:31 +0300)
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

index 13b3ae7678bf02c2245708afb79fdefb76e7fe5a..ffcd39b60ec5774cba570837152ee7f244a7a227 100644 (file)
@@ -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;
 }