I assume you're storing references to the objects as Persistent? All you need to do then is call SetWeak() https://v8docs.nodesource.com/node-0.10/d2/d78/classv8_1_1_persistent.html void MakeWeak (void *parameters, WeakReferenceCallback callback)
the callback is called when the object is GC'd. On Wed, Nov 15, 2017 at 8:37 AM, Jean-Marc Le Roux <jeanmarc.ler...@aerys.in > wrote: > So I've found a solution to make things lazy: I set an accessor instead of > decoding/setting the actual value. > > void > getter(Local<Name> property, const PropertyCallbackInfo<Value>& info) > { > Isolate* isolate = info.GetIsolate(); > > const bson_t* document = reinterpret_cast<bson_t*>( > info.This() > ->Get(String::NewFromUtf8(isolate, "__bson_document_ptr")) > ->ToInt32()->Value() > ); > > char key[255]; > property->ToString(isolate)->WriteUtf8(key, 255); > > bson_iter_t iter; > bson_iter_init(&iter, document); > // FIXME: index the property so we don't have to find it > bson_iter_find(&iter, key); > > // FIXME: replace the accessor with the deserialized value > > info.GetReturnValue().Set(iterator_to_value(isolate, &iter)); > } > > Local<Value> > fill_object(Isolate* isolate, Local<Object>& obj, const bson_t* document) > { > obj->Set( > String::NewFromUtf8(isolate, "__bson_document_ptr"), > Int32::New(isolate, reinterpret_cast<intptr_t>(document)) > ); > > bson_iter_t iter; > if (bson_iter_init(&iter, document)) > { > while (bson_iter_next(&iter)) > { > const char* key = bson_iter_key(&iter); > > if (!obj->Has(String::NewFromUtf8(isolate, key))) > { > obj->SetAccessor( > isolate->GetCurrentContext(), > String::NewFromUtf8(isolate, key), > &getter > ); > } > } > } > } > > The secret sauce is to : > > - keep the original data (the bson_t) allocated > - store the corresponding pointer in a v8::Object > > But now I have a memory leak because those pointers will never be freed. > How can I know when the Object will be disposed by the GC? > > Thanks, > > -- > -- > v8-users mailing list > v8-users@googlegroups.com > http://groups.google.com/group/v8-users > --- > You received this message because you are subscribed to the Google Groups > "v8-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to v8-users+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.