From b14f39b1c7b28d638e72effe2be9428dc24537df Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Fri, 23 Mar 2018 14:02:22 +0300 Subject: [PATCH] Fixed external_objects cloning. --- njs/njscript.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/njs/njscript.c b/njs/njscript.c index 48bcef6b..aea0e2ac 100644 --- a/njs/njscript.c +++ b/njs/njscript.c @@ -323,6 +323,7 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external) njs_vm_t *nvm; uint32_t items; nxt_int_t ret; + nxt_array_t *externals; nxt_mem_cache_pool_t *nmcp; nxt_thread_log_debug("CLONE:"); @@ -352,19 +353,21 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external) nvm->external_prototypes_hash = vm->external_prototypes_hash; items = vm->external_objects->items; - nvm->external_objects = nxt_array_create(items + 4, sizeof(void *), - &njs_array_mem_proto, - vm->mem_cache_pool); - if (nxt_slow_path(vm->external_objects == NULL)) { + externals = nxt_array_create(items + 4, sizeof(void *), + &njs_array_mem_proto, nvm->mem_cache_pool); + + if (nxt_slow_path(externals == NULL)) { return NULL; } if (items > 0) { - memcpy(nvm->external_objects->start, vm->external_objects->start, + memcpy(externals->start, vm->external_objects->start, items * sizeof(void *)); - vm->external_objects->items = items; + externals->items = items; } + nvm->external_objects = externals; + nvm->ops = vm->ops; nvm->current = vm->current; -- 2.47.3