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
-~----------~----~----~----~------~----~------~--~---

Reply via email to