Commit 1daa61fe authored by kasperl@chromium.org's avatar kasperl@chromium.org

Fix issue 65 by making sure not to leak any of the cache

tables when doing compilation cache operations.
Review URL: http://codereview.chromium.org/1939

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@280 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 888abb1b
......@@ -86,8 +86,14 @@ static bool HasOrigin(Handle<JSFunction> boilerplate,
static Handle<JSFunction> Lookup(Handle<String> source,
CompilationCache::Entry entry) {
Handle<CompilationCacheTable> table = GetTable(entry);
Object* result = table->Lookup(*source);
// Make sure not to leak the table into the surrounding handle
// scope. Otherwise, we risk keeping old tables around even after
// having cleared the cache.
Object* result;
{ HandleScope scope;
Handle<CompilationCacheTable> table = GetTable(entry);
result = table->Lookup(*source);
}
if (result->IsJSFunction()) {
return Handle<JSFunction>(JSFunction::cast(result));
} else {
......@@ -129,6 +135,7 @@ Handle<JSFunction> CompilationCache::LookupEval(Handle<String> source,
void CompilationCache::Associate(Handle<String> source,
Entry entry,
Handle<JSFunction> boilerplate) {
HandleScope scope;
ASSERT(boilerplate->IsBoilerplate());
Handle<CompilationCacheTable> table = GetTable(entry);
CALL_HEAP_FUNCTION_VOID(table->Put(*source, *boilerplate));
......
......@@ -445,7 +445,7 @@ class TestAsciiResource: public String::ExternalAsciiStringResource {
int TestAsciiResource::dispose_count = 0;
TEST(ScriptUsingStringResource) {
THREADED_TEST(ScriptUsingStringResource) {
TestResource::dispose_count = 0;
const char* c_source = "1 + 2 * 3";
uint16_t* two_byte_source = AsciiToTwoByteString(c_source);
......@@ -469,7 +469,7 @@ TEST(ScriptUsingStringResource) {
}
TEST(ScriptUsingAsciiStringResource) {
THREADED_TEST(ScriptUsingAsciiStringResource) {
TestAsciiResource::dispose_count = 0;
const char* c_source = "1 + 2 * 3";
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment