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() {
|
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();
|
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();
|
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) {
|
static double DoubleFromBits(uint64_t value) {
|
||||||
double target;
|
double target;
|
||||||
i::OS::MemCopy(&target, &value, sizeof(target));
|
i::OS::MemCopy(&target, &value, sizeof(target));
|
||||||
|
Loading…
Reference in New Issue
Block a user