Interestingly, the %s/Function/Object/g version worked without adding a call to 
SetInternalFieldCount.

~Theodore

> On Oct 6, 2016, at 2:50 PM, Zac Hansen <[email protected]> wrote:
> 
> A guess would be that it only works on types with internal fields, which are 
> only objecttemplate-sourced objects.   That's the only thing that would need 
> any type of user-specified code to run on GC.  But that's just a guess.   A 
> quick glance at the source doesn't back it up.
> 
> On Thu, Oct 6, 2016 at 9:48 AM, Theodore Dubois <[email protected]> wrote:
> I don’t think the problem is allocating the handle on the heap, I’m doing 
> that in my code too. The significant difference between your code and my code 
> is that I’m using a FunctionTemplate and trying to get a weak callback on the 
> Functions it creates, and you’re using an ObjectTemplate. When I changed 
> Function to Object in my code and fixed a few compiler errors, it worked.
> 
> It seems like it’s pretty easy to get this to work with objects, but much 
> harder with functions. Does anyone know how to make this work?
> 
> Thanks,
> ~Theodore
> 
> > On Oct 5, 2016, at 8:41 PM, Zac Hansen <[email protected]> wrote:
> >
> > Also, here's the somewhat generalized code I use for doing this in my 
> > integration library:
> >
> > https://github.com/xaxxon/v8toolkit/blob/master/include/v8toolkit.h#L972
> >
> > On Wed, Oct 5, 2016 at 8:36 PM, Zac Hansen <[email protected]> wrote:
> > Good news is, this program calls the callback.  Bad news it crashes, but I 
> > think it demonstrates the general idea.
> >
> > I believe the problem with your program is that your global with the weak 
> > callback goes away too early.  In my program below you can see I'm 
> > allocating the global on the heap (and leaking the crap out of it - but you 
> > can clean it up in the callback) and that makes the callback get called 
> > because the global is still around.
> >
> >
> >
> > caveat emptor
> >
> >
> >
> > P.S. Posting a compilable program next time makes it easier for me to help 
> > you
> >
> >
> >
> > #include <v8.h>
> >
> > #include <v8-platform.h>
> >
> > #include <libplatform/libplatform.h>
> >
> > #include <stdio.h>
> >
> >
> >
> > using namespace v8;
> >
> >
> >
> > void func_callback(const FunctionCallbackInfo<v8::Value> &data) {
> >
> >   fprintf(stderr, "Here\n");
> >
> > }
> >
> >
> >
> > void weak_callback(const WeakCallbackInfo<int> &data) {
> >
> >   fprintf(stderr, "weak callback\n");
> >
> > }
> >
> >
> >
> >
> >
> > class ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
> >
> > public:
> >
> >   inline virtual void* Allocate(size_t length) override {
> >
> >     void* data = AllocateUninitialized(length);
> >
> >     return data == NULL ? data : memset(data, 0, length);
> >
> >   }
> >
> >   inline virtual void* AllocateUninitialized(size_t length) override { 
> > return malloc(length); }
> >
> >   inline virtual void Free(void* data, size_t) override { free(data); }
> >
> > };
> >
> >
> >
> >
> >
> > int main() {
> >
> >   V8::InitializeICU();
> >
> >   Platform *current_platform = v8::platform::CreateDefaultPlatform();
> >
> >   V8::InitializePlatform(current_platform);
> >
> >   V8::Initialize();
> >
> >   V8::SetFlagsFromString("--expose_gc", strlen("--expose_gc"));
> >
> >   Isolate::CreateParams params;
> >
> >   params.array_buffer_allocator = new ArrayBufferAllocator();
> >
> >   Isolate *isolate = Isolate::New(params);
> >
> >   HandleScope hs(isolate);
> >
> >
> >
> >   Local<Context> context = Context::New(isolate);
> >
> >
> >
> >
> >
> >   int iii; // bogus int
> >
> >   Local<ObjectTemplate> ot = ObjectTemplate::New(isolate);
> >
> >   ot->SetInternalFieldCount(1);
> >
> >
> >
> >   for (int i = 0; ; i++) {
> >
> >     HandleScope hs2(isolate);
> >
> >     Local<Object> obj = ot->NewInstance(context).ToLocalChecked();
> >
> >     Global<Object> * gobject = new Global<Object>(isolate, obj);
> >
> >     gobject->SetWeak<int>(&iii, weak_callback, 
> > WeakCallbackType::kParameter);
> >
> >     isolate->AdjustAmountOfExternalAllocatedMemory(100000000);
> >
> >
> >
> >     if (i%1000==0)printf("%d\r", i);
> >
> >     /* context->Global()->Set(context, key, func).FromJust(); */
> >
> >     /* context->Global()->Delete(context, key).FromJust(); */
> >
> >   }
> >
> >
> >
> >
> >
> >   return 0;
> >
> >
> > On Wed, Oct 5, 2016 at 7:56 PM, <[email protected]> wrote:
> > Actually, that didn't work. Any other ideas? Any techniques for debugging 
> > GC (like getting information on where an object is referenced?)
> >
> > --
> > --
> > v8-users mailing list
> > [email protected]
> > http://groups.google.com/group/v8-users
> > ---
> > You received this message because you are subscribed to a topic in the 
> > Google Groups "v8-users" group.
> > To unsubscribe from this topic, visit 
> > https://groups.google.com/d/topic/v8-users/Rshbi2HKYCM/unsubscribe.
> > To unsubscribe from this group and all its topics, send an email to 
> > [email protected].
> > For more options, visit https://groups.google.com/d/optout.
> >
> >
> >
> > --
> > --
> > v8-users mailing list
> > [email protected]
> > http://groups.google.com/group/v8-users
> > ---
> > You received this message because you are subscribed to a topic in the 
> > Google Groups "v8-users" group.
> > To unsubscribe from this topic, visit 
> > https://groups.google.com/d/topic/v8-users/Rshbi2HKYCM/unsubscribe.
> > To unsubscribe from this group and all its topics, send an email to 
> > [email protected].
> > For more options, visit https://groups.google.com/d/optout.
> 
> --
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to a topic in the Google 
> Groups "v8-users" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/v8-users/Rshbi2HKYCM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> For more options, visit https://groups.google.com/d/optout.
> 
> 
> -- 
> -- 
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
> --- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "v8-users" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/v8-users/Rshbi2HKYCM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
-- 
v8-users mailing list
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to