]> git.kaiwu.me - njs.git/commitdiff
njs_vm_pending() is split in njs_vm_posted() and njs_vm_waiting().
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 28 Dec 2018 09:43:22 +0000 (12:43 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Fri, 28 Dec 2018 09:43:22 +0000 (12:43 +0300)
There are two types of events in njs:
    Posted - are ready to be executed by njs_vm_run().
    Waiting - await external async events.

njs/njs.c
njs/njs.h
njs/njs_event.h

index c956262eb888ca0e8111e423455ab865fc01b2c6..b88f497e52d68d30837d4fe14d21eb22017974ca 100644 (file)
--- a/njs/njs.c
+++ b/njs/njs.c
@@ -196,7 +196,7 @@ njs_vm_destroy(njs_vm_t *vm)
     njs_event_t        *event;
     nxt_lvlhsh_each_t  lhe;
 
-    if (njs_is_pending_events(vm)) {
+    if (njs_waiting_events(vm)) {
         nxt_lvlhsh_each_init(&lhe, &njs_event_hash_proto);
 
         for ( ;; ) {
@@ -558,9 +558,16 @@ njs_vm_del_event(njs_vm_t *vm, njs_vm_event_t vm_event)
 
 
 nxt_int_t
-njs_vm_pending(njs_vm_t *vm)
+njs_vm_waiting(njs_vm_t *vm)
 {
-    return njs_is_pending_events(vm);
+    return njs_waiting_events(vm);
+}
+
+
+nxt_int_t
+njs_vm_posted(njs_vm_t *vm)
+{
+    return njs_posted_events(vm);
 }
 
 
@@ -652,7 +659,7 @@ njs_vm_handle_events(njs_vm_t *vm)
         }
     }
 
-    return njs_is_pending_events(vm) ? NJS_AGAIN : NJS_OK;
+    return njs_posted_events(vm) ? NJS_AGAIN : NJS_OK;
 }
 
 
index 0368943d7f7813669904396b8401d88bb6040636..ac08842768f213f97cd9ba1d956afbd058a5a0bf 100644 (file)
--- a/njs/njs.h
+++ b/njs/njs.h
@@ -167,10 +167,22 @@ NXT_EXPORT njs_vm_event_t njs_vm_add_event(njs_vm_t *vm,
     njs_function_t *function, nxt_uint_t once, njs_host_event_t host_ev,
     njs_event_destructor destructor);
 NXT_EXPORT void njs_vm_del_event(njs_vm_t *vm, njs_vm_event_t vm_event);
-NXT_EXPORT nxt_int_t njs_vm_pending(njs_vm_t *vm);
 NXT_EXPORT nxt_int_t njs_vm_post_event(njs_vm_t *vm, njs_vm_event_t vm_event,
     const njs_value_t *args, nxt_uint_t nargs);
 
+/*
+ * Returns 1 if async events are present.
+ */
+NXT_EXPORT nxt_int_t njs_vm_waiting(njs_vm_t *vm);
+
+/*
+ * Returns 1 if posted events are ready to be executed.
+ */
+NXT_EXPORT nxt_int_t njs_vm_posted(njs_vm_t *vm);
+
+#define njs_vm_pending(vm)  (njs_vm_waiting(vm) || njs_vm_posted(vm))
+
+
 /*
  * Runs the specified function with provided arguments.
  *  NJS_OK successful run.
index 2fc865d62a9ab2375c62230b707e7c5fa2483f65..e09cdbc0abfa7e043d49e2c8642f7584f325fce3 100644 (file)
@@ -12,7 +12,9 @@
 #define NJS_EVENT_DELETE       2
 
 
-#define njs_is_pending_events(vm) (!nxt_lvlhsh_is_empty(&(vm)->events_hash))
+#define njs_waiting_events(vm) (!nxt_lvlhsh_is_empty(&(vm)->events_hash))
+
+#define njs_posted_events(vm) (!nxt_queue_is_empty(&(vm)->posted_events))
 
 
 typedef struct {