Reviewers: Christian Plesner Hansen, Description: Fix small memory leak in new serialization code.
Please review this at http://codereview.chromium.org/371068 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/bootstrapper.h M src/bootstrapper.cc Index: src/bootstrapper.h =================================================================== --- src/bootstrapper.h (revision 3238) +++ src/bootstrapper.h (working copy) @@ -80,8 +80,7 @@ class NativesExternalStringResource : public v8::String::ExternalAsciiStringResource { public: - explicit NativesExternalStringResource(const char* source) - : data_(source), length_(strlen(source)) { } + explicit NativesExternalStringResource(const char* source); const char* data() const { return data_; Index: src/bootstrapper.cc =================================================================== --- src/bootstrapper.cc (revision 3239) +++ src/bootstrapper.cc (working copy) @@ -97,21 +97,26 @@ static List<char*>* delete_these_non_arrays_on_tear_down = NULL; +NativesExternalStringResource::NativesExternalStringResource(const char* source) + : data_(source), length_(strlen(source)) { + if (delete_these_non_arrays_on_tear_down == NULL) { + delete_these_non_arrays_on_tear_down = new List<char*>(2); + } + // The resources are small objects and we only make a fixed number of + // them, but let's clean them up on exit for neatness. + delete_these_non_arrays_on_tear_down-> + Add(reinterpret_cast<char*>(this)); +} + + Handle<String> Bootstrapper::NativesSourceLookup(int index) { ASSERT(0 <= index && index < Natives::GetBuiltinsCount()); if (Heap::natives_source_cache()->get(index)->IsUndefined()) { if (!Snapshot::IsEnabled() || FLAG_new_snapshot) { - if (delete_these_non_arrays_on_tear_down == NULL) { - delete_these_non_arrays_on_tear_down = new List<char*>(2); - } // We can use external strings for the natives. NativesExternalStringResource* resource = new NativesExternalStringResource( Natives::GetScriptSource(index).start()); - // The resources are small objects and we only make a fixed number of - // them, but lets clean them up on exit for neatness. - delete_these_non_arrays_on_tear_down-> - Add(reinterpret_cast<char*>(resource)); Handle<String> source_code = Factory::NewExternalStringFromAscii(resource); Heap::natives_source_cache()->set(index, *source_code); --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
