Index: third_party/crashpad/crashpad/handler/crash_report_upload_thread.cc |
diff --git a/third_party/crashpad/crashpad/handler/crash_report_upload_thread.cc b/third_party/crashpad/crashpad/handler/crash_report_upload_thread.cc |
index c3c4f369449e701346434e44ddfca600788d9fb8..c84facb2e9459cdb55baa72e06a8e312a36099c0 100644 |
--- a/third_party/crashpad/crashpad/handler/crash_report_upload_thread.cc |
+++ b/third_party/crashpad/crashpad/handler/crash_report_upload_thread.cc |
@@ -21,7 +21,6 @@ |
#include <vector> |
#include "base/logging.h" |
-#include "base/macros.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/strings/utf_string_conversions.h" |
#include "build/build_config.h" |
@@ -34,7 +33,6 @@ |
#include "util/net/http_multipart_builder.h" |
#include "util/net/http_transport.h" |
#include "util/stdlib/map_insert.h" |
-#include "util/thread/thread.h" |
namespace crashpad { |
@@ -138,78 +136,30 @@ class CallRecordUploadAttempt { |
} // namespace |
-namespace internal { |
- |
-class CrashReportUploadHelperThread final : public Thread { |
- public: |
- explicit CrashReportUploadHelperThread(CrashReportUploadThread* self) |
- : self_(self) {} |
- ~CrashReportUploadHelperThread() override {} |
- |
- void ThreadMain() override { |
- self_->ThreadMain(); |
- } |
- |
- private: |
- CrashReportUploadThread* self_; |
- |
- DISALLOW_COPY_AND_ASSIGN(CrashReportUploadHelperThread); |
-}; |
- |
-} // namespace internal |
- |
CrashReportUploadThread::CrashReportUploadThread(CrashReportDatabase* database, |
const std::string& url) |
: url_(url), |
- database_(database), |
- semaphore_(0), |
- thread_(), |
- running_(false) { |
+ // Check for pending reports every 15 minutes, even in the absence of a |
+ // signal from the handler thread. This allows for failed uploads to be |
+ // retried periodically, and for pending reports written by other |
+ // processes to be recognized. |
+ thread_(15 * 60, this), |
+ database_(database) { |
} |
CrashReportUploadThread::~CrashReportUploadThread() { |
- DCHECK(!running_); |
- DCHECK(!thread_); |
} |
void CrashReportUploadThread::Start() { |
- DCHECK(!running_); |
- DCHECK(!thread_); |
- |
- running_ = true; |
- thread_.reset(new internal::CrashReportUploadHelperThread(this)); |
- thread_->Start(); |
+ thread_.Start(0); |
} |
void CrashReportUploadThread::Stop() { |
- DCHECK(running_); |
- DCHECK(thread_); |
- |
- if (!running_) { |
- return; |
- } |
- |
- running_ = false; |
- semaphore_.Signal(); |
- |
- thread_->Join(); |
- thread_.reset(); |
+ thread_.Stop(); |
} |
void CrashReportUploadThread::ReportPending() { |
- semaphore_.Signal(); |
-} |
- |
-void CrashReportUploadThread::ThreadMain() { |
- while (running_) { |
- ProcessPendingReports(); |
- |
- // Check for pending reports every 15 minutes, even in the absence of a |
- // signal from the handler thread. This allows for failed uploads to be |
- // retried periodically, and for pending reports written by other processes |
- // to be recognized. |
- semaphore_.TimedWait(15 * 60); |
- } |
+ thread_.DoWorkNow(); |
} |
void CrashReportUploadThread::ProcessPendingReports() { |
@@ -227,7 +177,7 @@ void CrashReportUploadThread::ProcessPendingReports() { |
// Respect Stop() being called after at least one attempt to process a |
// report. |
- if (!running_) { |
+ if (!thread_.is_running()) { |
return; |
} |
} |
@@ -378,4 +328,8 @@ CrashReportUploadThread::UploadResult CrashReportUploadThread::UploadReport( |
return UploadResult::kSuccess; |
} |
+void CrashReportUploadThread::DoWork(const WorkerThread* thread) { |
+ ProcessPendingReports(); |
+} |
+ |
} // namespace crashpad |