details: http://hg.nginx.org/njs/rev/d09638142829 branches: changeset: 384:d09638142829 user: Dmitry Volyntsev <xei...@nginx.com> date: Thu Jul 06 19:09:56 2017 +0300 description: Moving VM initialization from njs_vm_clone() to njs_vm_init().
diffstat: njs/njscript.c | 102 +++++++++++++++++++++++++++++++++----------------------- 1 files changed, 60 insertions(+), 42 deletions(-) diffs (144 lines): diff -r 57bd01817edb -r d09638142829 njs/njscript.c --- a/njs/njscript.c Thu Jul 06 19:07:41 2017 +0300 +++ b/njs/njscript.c Thu Jul 06 19:09:56 2017 +0300 @@ -26,6 +26,9 @@ #include <string.h> +static nxt_int_t njs_vm_init(njs_vm_t *vm); + + static void * njs_alloc(void *mem, size_t size) { @@ -244,11 +247,8 @@ njs_vm_compile(njs_vm_t *vm, u_char **st njs_vm_t * njs_vm_clone(njs_vm_t *vm, nxt_mem_cache_pool_t *mcp, void **external) { - u_char *values; - size_t size, scope_size; njs_vm_t *nvm; nxt_int_t ret; - njs_frame_t *frame; nxt_mem_cache_pool_t *nmcp; nxt_thread_log_debug("CLONE:"); @@ -274,54 +274,17 @@ njs_vm_clone(njs_vm_t *vm, nxt_mem_cache nvm->values_hash = vm->values_hash; nvm->externals_hash = vm->externals_hash; - nvm->retval = njs_value_void; nvm->current = vm->current; nvm->external = external; nvm->global_scope = vm->global_scope; - scope_size = vm->scope_size; - nvm->scope_size = scope_size; - scope_size += NJS_INDEX_GLOBAL_OFFSET; - - size = NJS_GLOBAL_FRAME_SIZE + scope_size + NJS_FRAME_SPARE_SIZE; - size = nxt_align_size(size, NJS_FRAME_SPARE_SIZE); - - frame = nxt_mem_cache_align(nmcp, sizeof(njs_value_t), size); - if (nxt_slow_path(frame == NULL)) { - goto fail; - } - - memset(frame, 0, NJS_GLOBAL_FRAME_SIZE); + nvm->scope_size = vm->scope_size; - nvm->top_frame = &frame->native; - nvm->active_frame = frame; - - frame->native.size = size; - frame->native.free_size = size - (NJS_GLOBAL_FRAME_SIZE + scope_size); - - values = (u_char *) frame + NJS_GLOBAL_FRAME_SIZE; - - frame->native.free = values + scope_size; - - nvm->scopes[NJS_SCOPE_GLOBAL] = (njs_value_t *) values; - memcpy(values + NJS_INDEX_GLOBAL_OFFSET, vm->global_scope, - vm->scope_size); - - ret = njs_regexp_init(nvm); + ret = njs_vm_init(nvm); if (nxt_slow_path(ret != NXT_OK)) { goto fail; } - ret = njs_builtin_objects_clone(nvm); - if (nxt_slow_path(ret != NXT_OK)) { - goto fail; - } - - nvm->trace.level = NXT_LEVEL_TRACE; - nvm->trace.size = 2048; - nvm->trace.handler = njs_parser_trace_handler; - nvm->trace.data = nvm; - return nvm; } @@ -335,6 +298,61 @@ fail: } +static nxt_int_t +njs_vm_init(njs_vm_t *vm) +{ + size_t size, scope_size; + u_char *values; + nxt_int_t ret; + njs_frame_t *frame; + + scope_size = vm->scope_size + NJS_INDEX_GLOBAL_OFFSET; + + size = NJS_GLOBAL_FRAME_SIZE + scope_size + NJS_FRAME_SPARE_SIZE; + size = nxt_align_size(size, NJS_FRAME_SPARE_SIZE); + + frame = nxt_mem_cache_align(vm->mem_cache_pool, sizeof(njs_value_t), size); + if (nxt_slow_path(frame == NULL)) { + return NXT_ERROR; + } + + memset(frame, 0, NJS_GLOBAL_FRAME_SIZE); + + vm->top_frame = &frame->native; + vm->active_frame = frame; + + frame->native.size = size; + frame->native.free_size = size - (NJS_GLOBAL_FRAME_SIZE + scope_size); + + values = (u_char *) frame + NJS_GLOBAL_FRAME_SIZE; + + frame->native.free = values + scope_size; + + vm->scopes[NJS_SCOPE_GLOBAL] = (njs_value_t *) values; + memcpy(values + NJS_INDEX_GLOBAL_OFFSET, vm->global_scope, + vm->scope_size); + + ret = njs_regexp_init(vm); + if (nxt_slow_path(ret != NXT_OK)) { + return NXT_ERROR; + } + + ret = njs_builtin_objects_clone(vm); + if (nxt_slow_path(ret != NXT_OK)) { + return NXT_ERROR; + } + + vm->retval = njs_value_void; + + vm->trace.level = NXT_LEVEL_TRACE; + vm->trace.size = 2048; + vm->trace.handler = njs_parser_trace_handler; + vm->trace.data = vm; + + return NXT_OK; +} + + nxt_int_t njs_vm_call(njs_vm_t *vm, njs_function_t *function, njs_opaque_value_t *args, nxt_uint_t nargs) _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel