From: Dmitry Volyntsev Date: Fri, 28 Dec 2018 09:43:22 +0000 (+0300) Subject: njs_vm_pending() is split in njs_vm_posted() and njs_vm_waiting(). X-Git-Tag: 0.2.8~100 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=5c38c4ed8b8c0635f73c66dec768702d5069c17f;p=njs.git njs_vm_pending() is split in njs_vm_posted() and njs_vm_waiting(). There are two types of events in njs: Posted - are ready to be executed by njs_vm_run(). Waiting - await external async events. --- diff --git a/njs/njs.c b/njs/njs.c index c956262e..b88f497e 100644 --- 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; } diff --git a/njs/njs.h b/njs/njs.h index 0368943d..ac088427 100644 --- 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. diff --git a/njs/njs_event.h b/njs/njs_event.h index 2fc865d6..e09cdbc0 100644 --- a/njs/njs_event.h +++ b/njs/njs_event.h @@ -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 {