Hello there,
I am running V8 3.31.1, and I am experiencing an issue that looks like GC
exhaustion. The code I run is as follows:
#include <v8.h>
#include <iostream>
v8::Handle<v8::String> Stringify(v8::Isolate *isolate, v8::Handle<v8::Value>
val)
{
v8::EscapableHandleScope handle_scope(isolate);
if (!val.IsEmpty() && val->IsString())
{
v8::Local<v8::String> ret = v8::Handle<v8::String>::Cast(val);
return handle_scope.Escape(ret);
}
v8::String::Utf8Value charVal(val);
v8::Local<v8::String> ret = v8::String::NewFromUtf8(isolate, *charVal);
return handle_scope.Escape(ret);
}
void CreateValue(v8::Isolate *isolate, int32_t number)
{
if ((number % 10000) == 0) std::cout << "number = " << number << std::
endl;
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Value> iVal = v8::Integer::New(isolate,number);
v8::Local<v8::String> sVal = Stringify(isolate,iVal);
(void)sVal;
}
int main(int argc, char* argv[])
{
v8::V8::Initialize();
v8::Isolate* isolate = v8::Isolate::New();
v8::Isolate::Scope isolate_scope(isolate);
v8::HandleScope handle_scope(isolate);
v8::Local<v8::Context> context = v8::Context::New(isolate);
v8::Context::Scope context_scope(context);
for (int32_t i = 0; i < 0x7FFFFFFF; ++i)
{
CreateValue(isolate,i);
}
return 0;
}
When I execute it, it crashes:
# gdb stringify
GNU gdb (GDB) 7.6
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /root/v8/samples/hello_stringify...(no debugging
symbols found)...done.
(gdb) run
Starting program: /root/v8/samples/hello_stringify
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[New Thread 0x7ffff4613700 (LWP 23709)]
number = 0
number = 10000
number = 20000
number = 30000
number = 40000
number = 50000
number = 60000
number = 70000
number = 80000
number = 90000
number = 100000
number = 110000
number = 120000
number = 130000
number = 140000
number = 150000
number = 160000
number = 170000
number = 180000
number = 190000
number = 200000
number = 210000
number = 220000
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff76a8071 in
v8::internal::MarkCompactCollector::StartSweeperThreads() () from
/usr/lib64/libv8.so
(gdb) bt
#0 0x00007ffff76a8071 in
v8::internal::MarkCompactCollector::StartSweeperThreads() () from
/usr/lib64/libv8.so
#1 0x00007ffff76b2378 in v8::internal::MarkCompactCollector::SweepSpaces()
() from /usr/lib64/libv8.so
#2 0x00007ffff76bd11c in
v8::internal::MarkCompactCollector::CollectGarbage() () from
/usr/lib64/libv8.so
#3 0x00007ffff767cb56 in v8::internal::Heap::MarkCompact() () from
/usr/lib64/libv8.so
#4 0x00007ffff7685b65 in
v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector,
v8::GCCallbackFlags) () from /usr/lib64/libv8.so
#5 0x00007ffff7685f7a in
v8::internal::Heap::CollectGarbage(v8::internal::GarbageCollector, char
const*, char const*, v8::GCCallbackFlags) () from /usr/lib64/libv8.so
#6 0x00007ffff7637fce in v8::internal::Factory::NewRawOneByteString(int,
v8::internal::PretenureFlag) () from /usr/lib64/libv8.so
#7 0x00007ffff76380f9 in
v8::internal::Factory::NewStringFromOneByte(v8::internal::Vector<unsigned
char const>, v8::internal::PretenureFlag) () from /usr/lib64/libv8.so
#8 0x00007ffff763848e in
v8::internal::Factory::NewStringFromUtf8(v8::internal::Vector<char const>,
v8::internal::PretenureFlag) () from /usr/lib64/libv8.so
#9 0x00007ffff7508b7c in v8::String::NewFromUtf8(v8::Isolate*, char
const*, v8::String::NewStringType, int) () from /usr/lib64/libv8.so
#10 0x00000000004013db in Stringify(v8::Isolate*, v8::Handle<v8::Value>) ()
#11 0x000000000040148a in CreateValue(v8::Isolate*, int) ()
#12 0x000000000040121d in main ()
Any reason why this should be happening? Am I doing anything wrong?
Regards,
Danny
--
--
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.