Hi v8-users, We have an ArrayBufferAllocator implementation that counts how much memory has been allocated. It basically looks like this:
class AllocatorImpl final: public v8::ArrayBuffer::Allocator { public: AllocatorImpl(): allocated(0) {} ~AllocatorImpl(); inline size_t getMemoryUsage() const { return allocated; } void* Allocate(size_t length) { allocated += length; return calloc(length, 1); } void* AllocateUninitialized(size_t length) { allocated += length; return malloc(length); } void Free(void* data, size_t length) { allocated -= length; free(data); } private: size_t allocated; }; We're observing something strange: Sometimes (very rarely!), the `allocated` value drops below zero and wraps around, apparently indicating that V8 has Free()'d more than it Allocate()ed. However, there don't seem to be any issues with double-frees or freeing an invalid pointer. Any idea what could lead to this? Is it possible for V8 to pass a different `legth` value to Free() than it passed to Allocate()? Unfortunately I have no idea how to reproduce this reliably. It only happens very occasionally in production. :/ -Kenton -- -- 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.