Revision: 6870
Author: [email protected]
Date: Mon Feb 21 08:11:46 2011
Log: Heap::gc_count_, last_gc_count, and kGCsBetweenCleanup should be unsigned
in order to not be vulnerable to overflow issues.

Patch by Mark Lam of Hewlett-Packard Development Company, LP

Review URL: http://codereview.chromium.org/5966001
http://code.google.com/p/v8/source/detail?r=6870

Modified:
 /branches/bleeding_edge/src/heap.cc
 /branches/bleeding_edge/src/heap.h

=======================================
--- /branches/bleeding_edge/src/heap.cc Fri Feb 18 02:53:38 2011
+++ /branches/bleeding_edge/src/heap.cc Mon Feb 21 08:11:46 2011
@@ -134,7 +134,7 @@

 int Heap::mc_count_ = 0;
 int Heap::ms_count_ = 0;
-int Heap::gc_count_ = 0;
+unsigned int Heap::gc_count_ = 0;

 GCTracer* Heap::tracer_ = NULL;

@@ -3796,9 +3796,9 @@
   static const int kIdlesBeforeMarkSweep = 7;
   static const int kIdlesBeforeMarkCompact = 8;
   static const int kMaxIdleCount = kIdlesBeforeMarkCompact + 1;
-  static const int kGCsBetweenCleanup = 4;
+  static const unsigned int kGCsBetweenCleanup = 4;
   static int number_idle_notifications = 0;
-  static int last_gc_count = gc_count_;
+  static unsigned int last_gc_count = gc_count_;

   bool uncommit = true;
   bool finished = false;
@@ -3807,7 +3807,7 @@
   // GCs have taken place. This allows another round of cleanup based
   // on idle notifications if enough work has been carried out to
   // provoke a number of garbage collections.
-  if (gc_count_ < last_gc_count + kGCsBetweenCleanup) {
+  if (gc_count_ - last_gc_count < kGCsBetweenCleanup) {
     number_idle_notifications =
         Min(number_idle_notifications + 1, kMaxIdleCount);
   } else {
=======================================
--- /branches/bleeding_edge/src/heap.h  Mon Feb 14 13:21:33 2011
+++ /branches/bleeding_edge/src/heap.h  Mon Feb 21 08:11:46 2011
@@ -1180,7 +1180,7 @@

   static int mc_count_;  // how many mark-compact collections happened
   static int ms_count_;  // how many mark-sweep collections happened
-  static int gc_count_;  // how many gc happened
+  static unsigned int gc_count_;  // how many gc happened

   // Total length of the strings we failed to flatten since the last GC.
   static int unflattened_strings_length_;
@@ -1907,7 +1907,7 @@
void set_collector(GarbageCollector collector) { collector_ = collector; }

   // Sets the GC count.
-  void set_gc_count(int count) { gc_count_ = count; }
+  void set_gc_count(unsigned int count) { gc_count_ = count; }

   // Sets the full GC count.
   void set_full_gc_count(int count) { full_gc_count_ = count; }
@@ -1950,7 +1950,7 @@

   // A count (including this one, eg, the first collection is 1) of the
   // number of garbage collections.
-  int gc_count_;
+  unsigned int gc_count_;

// A count (including this one) of the number of full garbage collections.
   int full_gc_count_;

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to