Add last OS error into heap stats.
authorantonm@chromium.org <antonm@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 13 Aug 2010 11:11:36 +0000 (11:11 +0000)
committerantonm@chromium.org <antonm@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 13 Aug 2010 11:11:36 +0000 (11:11 +0000)
That could allow us to understand why commit of from space sometimes fails.
Another option would be start a separate structure with OS-related info, but
as it's a single field, let's put it into HeapStats, at least for now.

Review URL: http://codereview.chromium.org/3118013

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@5261 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/api.cc
src/heap.cc
src/heap.h
src/platform-nullos.cc
src/platform-posix.cc
src/platform-win32.cc
src/platform.h

index b3164dd01eec2dbd41803c4c9ebec63e2a9da41a..8db8238b1fe96ee9962bb18bdc06063a9cbbf3d3 100644 (file)
@@ -174,6 +174,8 @@ void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
   heap_stats.objects_per_type = objects_per_type;
   int size_per_type[LAST_TYPE + 1] = {0};
   heap_stats.size_per_type = size_per_type;
+  int os_error;
+  heap_stats.os_error = &os_error;
   int end_marker;
   heap_stats.end_marker = &end_marker;
   i::Heap::RecordStats(&heap_stats, take_snapshot);
index 50e6656d00aacea3c51ca6720125b6107704671c..1d696c7a167e1914ef092593fe9a49aa3c8627c9 100644 (file)
@@ -4076,6 +4076,7 @@ void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
   *stats->memory_allocator_size = MemoryAllocator::Size();
   *stats->memory_allocator_capacity =
       MemoryAllocator::Size() + MemoryAllocator::Available();
+  *stats->os_error = OS::GetLastError();
   if (take_snapshot) {
     HeapIterator iterator;
     for (HeapObject* obj = iterator.next();
index ac00827d3834717bed0563e242668dd8057a61fe..93b90b1846acbab3717e0ffc61c195dc06079bba 100644 (file)
@@ -1345,7 +1345,8 @@ class HeapStats {
   int* memory_allocator_capacity;       // 20
   int* objects_per_type;                // 21
   int* size_per_type;                   // 22
-  int* end_marker;                      // 23
+  int* os_error;                        // 23
+  int* end_marker;                      // 24
 };
 
 
index 656c317b62c516b87eaabbd5717f20a19ff75412..b8392e886ea60874f697d81146ea45c5902570e8 100644 (file)
@@ -100,6 +100,12 @@ double OS::DaylightSavingsOffset(double time) {
 }
 
 
+int OS::GetLastError() {
+  UNIMPLEMENTED();
+  return 0;
+}
+
+
 // Returns the local time offset in milliseconds east of UTC without
 // taking daylight savings time into account.
 double OS::LocalTimeOffset() {
index 613e8e4051f79ca80a7804340a5d023aa7f02653..c50d396ad3822542dbaf75c56986913d5c412618 100644 (file)
@@ -108,6 +108,11 @@ double OS::DaylightSavingsOffset(double time) {
 }
 
 
+int OS::GetLastError() {
+  return errno;
+}
+
+
 // ----------------------------------------------------------------------------
 // POSIX stdio support.
 //
index af3e9b2f3002281fab58f17b7f01ac55f2760491..86314a805e5dfb87a5eac8086b2702cfc0a39648 100644 (file)
@@ -651,6 +651,11 @@ double OS::DaylightSavingsOffset(double time) {
 }
 
 
+int OS::GetLastError() {
+  return ::GetLastError();
+}
+
+
 // ----------------------------------------------------------------------------
 // Win32 console output.
 //
index d63ca5e617358f98510404b9abc9fd89af2bcdb4..7539fd2ddb4d29132c22635a54a6155d52772f04 100644 (file)
@@ -165,6 +165,9 @@ class OS {
   // Returns the daylight savings offset for the given time.
   static double DaylightSavingsOffset(double time);
 
+  // Returns last OS error.
+  static int GetLastError();
+
   static FILE* FOpen(const char* path, const char* mode);
 
   // Log file open mode is platform-dependent due to line ends issues.