const njs_extern_t *proto, njs_external_ptr_t object)
{
void *obj;
+ uint32_t n;
njs_arr_t *externals;
if (njs_slow_path(proto == NULL)) {
return NJS_ERROR;
}
- if (njs_slow_path(vm->external_objects == NULL)) {
- externals = njs_arr_create(vm->mem_pool, 4, sizeof(void *));
+ if (vm->external_objects->mem_pool != vm->mem_pool) {
+
+ /* Making a local copy of externals in shared VM. */
+
+ n = vm->external_objects->items;
+
+ externals = njs_arr_create(vm->mem_pool, n + 4, sizeof(void *));
if (njs_slow_path(externals == NULL)) {
return NJS_ERROR;
}
+ if (n > 0) {
+ memcpy(externals->start, vm->external_objects->start,
+ n * sizeof(void *));
+ externals->items = n;
+ }
+
vm->external_objects = externals;
}
-
obj = njs_arr_add(vm->external_objects);
if (njs_slow_path(obj == NULL)) {
return NJS_ERROR;
{ njs_str("isNaN(function(){})"),
njs_str("true") },
+
+ { njs_str("var r; for (var i = 0; i < 2**10; i++) {r = $r.create('XXX').uri;}"),
+ njs_str("undefined") },
};