Chromium Code Reviews| Index: src/d8.cc |
| diff --git a/src/d8.cc b/src/d8.cc |
| index 93b383d9acda6c77560a7cf459613263db59d29c..160ffa316edf90eac24a5fc62a040e979d82e134 100644 |
| --- a/src/d8.cc |
| +++ b/src/d8.cc |
| @@ -968,6 +968,16 @@ void ShellThread::Run() { |
| #endif // V8_SHARED |
| +SourceGroup::~SourceGroup() { |
| + delete next_semaphore_; |
| + next_semaphore_ = NULL; |
| + delete done_semaphore_; |
| + done_semaphore_ = NULL; |
| + delete thread_; |
| + thread_ = NULL; |
| +} |
| + |
| + |
| void SourceGroup::ExitShell(int exit_code) { |
| // Use _exit instead of exit to avoid races between isolate |
| // threads and static destructors. |
| @@ -1037,7 +1047,7 @@ i::Thread::Options SourceGroup::GetThreadOptions() { |
| void SourceGroup::ExecuteInThread() { |
| Isolate* isolate = Isolate::New(); |
| do { |
| - if (!next_semaphore_.is_empty()) next_semaphore_->Wait(); |
| + if (next_semaphore_ != NULL) next_semaphore_->Wait(); |
| { |
| Isolate::Scope iscope(isolate); |
| Locker lock(isolate); |
| @@ -1049,15 +1059,15 @@ void SourceGroup::ExecuteInThread() { |
| } |
| context.Dispose(); |
| } |
| - if (!done_semaphore_.is_empty()) done_semaphore_->Signal(); |
| + if (done_semaphore_ != NULL) done_semaphore_->Signal(); |
| } while (!Shell::options.last_run); |
| isolate->Dispose(); |
| } |
| void SourceGroup::StartExecuteInThread() { |
| - if (thread_.is_empty()) { |
| - thread_ = i::SmartPointer<i::Thread>(new IsolateThread(this)); |
| + if (thread_ == NULL) { |
| + thread_ = new IsolateThread(this); |
| thread_->Start(); |
| } |
| next_semaphore_->Signal(); |
| @@ -1065,9 +1075,10 @@ void SourceGroup::StartExecuteInThread() { |
| void SourceGroup::WaitForThread() { |
| - if (thread_.is_empty()) return; |
| + if (thread_ == NULL) return; |
| if (Shell::options.last_run) { |
| thread_->Join(); |
| + thread_ = NULL; |
|
Vitaly Repeshko
2011/09/08 22:56:40
Ooops, didn't notice this edit. This looks wrong.
tfarina
2011/09/08 22:58:18
Double-free? It was here before the SmartPointer c
|
| } else { |
| done_semaphore_->Wait(); |
| } |