Author: [EMAIL PROTECTED]
Date: Thu Sep 11 06:39:48 2008
New Revision: 280
Modified:
branches/bleeding_edge/src/compilation-cache.cc
branches/bleeding_edge/test/cctest/test-api.cc
Log:
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
Modified: branches/bleeding_edge/src/compilation-cache.cc
==============================================================================
--- branches/bleeding_edge/src/compilation-cache.cc (original)
+++ branches/bleeding_edge/src/compilation-cache.cc Thu Sep 11 06:39:48 2008
@@ -86,8 +86,14 @@
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 @@
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));
Modified: branches/bleeding_edge/test/cctest/test-api.cc
==============================================================================
--- branches/bleeding_edge/test/cctest/test-api.cc (original)
+++ branches/bleeding_edge/test/cctest/test-api.cc Thu Sep 11 06:39:48 2008
@@ -445,7 +445,7 @@
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(ScriptUsingAsciiStringResource) {
+THREADED_TEST(ScriptUsingAsciiStringResource) {
TestAsciiResource::dispose_count = 0;
const char* c_source = "1 + 2 * 3";
{
--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---