Dispose external string resource on heap teardown.
R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/83253002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18001 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
21fb1401bd
commit
3acd5dcdce
@ -7816,7 +7816,13 @@ void ExternalStringTable::CleanUp() {
|
||||
|
||||
|
||||
void ExternalStringTable::TearDown() {
|
||||
for (int i = 0; i < new_space_strings_.length(); ++i) {
|
||||
heap_->FinalizeExternalString(ExternalString::cast(new_space_strings_[i]));
|
||||
}
|
||||
new_space_strings_.Free();
|
||||
for (int i = 0; i < old_space_strings_.length(); ++i) {
|
||||
heap_->FinalizeExternalString(ExternalString::cast(old_space_strings_[i]));
|
||||
}
|
||||
old_space_strings_.Free();
|
||||
}
|
||||
|
||||
|
@ -17188,6 +17188,26 @@ TEST(VisitExternalStrings) {
|
||||
}
|
||||
|
||||
|
||||
TEST(ExternalStringCollectedAtTearDown) {
|
||||
int destroyed = 0;
|
||||
v8::Isolate* isolate = v8::Isolate::New();
|
||||
{ v8::Isolate::Scope isolate_scope(isolate);
|
||||
v8::HandleScope handle_scope(isolate);
|
||||
const char* s = "One string to test them all, one string to find them.";
|
||||
TestAsciiResource* inscription =
|
||||
new TestAsciiResource(i::StrDup(s), &destroyed);
|
||||
v8::Local<v8::String> ring = v8::String::NewExternal(inscription);
|
||||
// Ring is still alive. Orcs are roaming freely across our lands.
|
||||
CHECK_EQ(0, destroyed);
|
||||
USE(ring);
|
||||
}
|
||||
|
||||
isolate->Dispose();
|
||||
// Ring has been destroyed. Free Peoples of Middle-earth Rejoice.
|
||||
CHECK_EQ(1, destroyed);
|
||||
}
|
||||
|
||||
|
||||
static double DoubleFromBits(uint64_t value) {
|
||||
double target;
|
||||
i::OS::MemCopy(&target, &value, sizeof(target));
|
||||
|
Loading…
Reference in New Issue
Block a user