Index: src/log.cc |
diff --git a/src/log.cc b/src/log.cc |
index 3d3cd2d262b9604502283bf10eee1db34026e977..8fbbee391a702a3839b296f0561c6ebfc42b5be0 100644 |
--- a/src/log.cc |
+++ b/src/log.cc |
@@ -301,30 +301,37 @@ class Log : public AllStatic { |
// Frees all resources acquired in Open... functions. |
static void Close(); |
- // See description in v8.h. |
+ // See description in include/v8.h. |
static int GetLogLines(int from_pos, char* dest_buf, int max_size); |
- static bool is_enabled() { return output_.handle != NULL; } |
+ // Returns whether logging is enabled. |
+ static bool is_enabled() { |
Søren Thygesen Gjesse
2009/05/25 06:38:31
How about changing this to IsEnabled() as well? Th
Mikhail Naganov
2009/05/25 08:38:51
Good idea. Done.
|
+ return output_handle_ != NULL || output_buffer_ != NULL; |
+ } |
- typedef int (*WritePtr)(const char* msg, int length); |
private: |
+ typedef int (*WritePtr)(const char* msg, int length); |
+ |
+ // Initialization function called from Open... functions. |
static void Init(); |
// Write functions assume that mutex_ is acquired by the caller. |
static WritePtr Write; |
+ // Implementation of writing to a log file. |
static int WriteToFile(const char* msg, int length) { |
- ASSERT(output_.handle != NULL); |
- int rv = fwrite(msg, 1, length, output_.handle); |
+ ASSERT(output_handle_ != NULL); |
+ int rv = fwrite(msg, 1, length, output_handle_); |
ASSERT(length == rv); |
return rv; |
} |
+ // Implementation of writing to a memory buffer. |
static int WriteToMemory(const char* msg, int length) { |
- ASSERT(output_.buffer != NULL); |
- ASSERT(output_buffer_write_pos_ >= output_.buffer); |
+ ASSERT(output_buffer_ != NULL); |
+ ASSERT(output_buffer_write_pos_ >= output_buffer_); |
if (output_buffer_write_pos_ + length |
- <= output_.buffer + kOutputBufferSize) { |
+ <= output_buffer_ + kOutputBufferSize) { |
memcpy(output_buffer_write_pos_, msg, length); |
output_buffer_write_pos_ += length; |
return length; |
@@ -334,14 +341,14 @@ class Log : public AllStatic { |
} |
} |
- // When logging is active, output_ refers the file or memory buffer |
- // events are written to. |
- // mutex_ should be acquired before using output_. |
- union Output { |
- FILE* handle; |
- char* buffer; |
- }; |
- static Output output_; |
+ // When logging is active, either output_handle_ or output_buffer_ is used |
+ // to store a pointer to log destination. If logging was opened via OpenStdout |
+ // or OpenFile, then output_handle_ is used. If logging was opened |
+ // via OpenMemoryBuffer, then output_buffer_ is used. |
+ // mutex_ should be acquired before using output_handle_ or output_buffer_. |
+ static FILE* output_handle_; |
+ |
+ static char* output_buffer_; |
// mutex_ is a Mutex used for enforcing exclusive |
// access to the formatting buffer and the log file or log memory buffer. |
@@ -365,7 +372,8 @@ class Log : public AllStatic { |
Log::WritePtr Log::Write = NULL; |
-Log::Output Log::output_ = {NULL}; |
+FILE* Log::output_handle_ = NULL; |
+char* Log::output_buffer_ = NULL; |
Mutex* Log::mutex_ = NULL; |
char* Log::output_buffer_write_pos_ = NULL; |
char* Log::message_buffer_ = NULL; |
@@ -378,25 +386,25 @@ void Log::Init() { |
void Log::OpenStdout() { |
- ASSERT(output_.handle == NULL); |
- output_.handle = stdout; |
+ ASSERT(!is_enabled()); |
+ output_handle_ = stdout; |
Write = WriteToFile; |
Init(); |
} |
void Log::OpenFile(const char* name) { |
- ASSERT(output_.handle == NULL); |
- output_.handle = OS::FOpen(name, OS::LogFileOpenMode); |
+ ASSERT(!is_enabled()); |
+ output_handle_ = OS::FOpen(name, OS::LogFileOpenMode); |
Write = WriteToFile; |
Init(); |
} |
void Log::OpenMemoryBuffer() { |
- ASSERT(output_.buffer == NULL); |
- output_.buffer = NewArray<char>(kOutputBufferSize); |
- output_buffer_write_pos_ = output_.buffer; |
+ ASSERT(!is_enabled()); |
+ output_buffer_ = NewArray<char>(kOutputBufferSize); |
+ output_buffer_write_pos_ = output_buffer_; |
Write = WriteToMemory; |
Init(); |
} |
@@ -404,11 +412,11 @@ void Log::OpenMemoryBuffer() { |
void Log::Close() { |
if (Write == WriteToFile) { |
- fclose(output_.handle); |
- output_.handle = NULL; |
+ fclose(output_handle_); |
+ output_handle_ = NULL; |
} else if (Write == WriteToMemory) { |
- DeleteArray(output_.buffer); |
- output_.buffer = NULL; |
+ DeleteArray(output_buffer_); |
+ output_buffer_ = NULL; |
} else { |
ASSERT(Write == NULL); |
} |
@@ -424,15 +432,15 @@ void Log::Close() { |
int Log::GetLogLines(int from_pos, char* dest_buf, int max_size) { |
if (Write != WriteToMemory) return 0; |
- ASSERT(output_.buffer != NULL); |
- ASSERT(output_buffer_write_pos_ >= output_.buffer); |
+ ASSERT(output_buffer_ != NULL); |
+ ASSERT(output_buffer_write_pos_ >= output_buffer_); |
ASSERT(from_pos >= 0); |
ASSERT(max_size >= 0); |
int actual_size = max_size; |
- char* buffer_read_pos = output_.buffer + from_pos; |
+ char* buffer_read_pos = output_buffer_ + from_pos; |
ScopedLock sl(mutex_); |
if (actual_size == 0 |
- || output_buffer_write_pos_ == output_.buffer |
+ || output_buffer_write_pos_ == output_buffer_ |
|| buffer_read_pos >= output_buffer_write_pos_) { |
// No data requested or can be returned. |
return 0; |
@@ -584,7 +592,7 @@ VMState Logger::bottom_state_(EXTERNAL); |
SlidingStateWindow* Logger::sliding_state_window_ = NULL; |
-bool Logger::is_enabled() { |
+bool Logger::IsEnabled() { |
return Log::is_enabled(); |
} |