Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Unified Diff: base/threading/thread.h

Issue 8427007: Thread::Stop() must be called before any subclass's destructor completes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Latest version as trybot-ted Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/memory/weak_ptr_unittest.cc ('k') | base/threading/thread_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/threading/thread.h
diff --git a/base/threading/thread.h b/base/threading/thread.h
index d7451ec58ab9238db1b434c4944523a0180e2506..2ee4fa27fdc57e0beda14f976a28e3db00412987 100644
--- a/base/threading/thread.h
+++ b/base/threading/thread.h
@@ -21,6 +21,8 @@ namespace base {
// pending tasks queued on the thread's message loop will run to completion
// before the thread is terminated.
//
+// NOTE: Subclasses must call Stop() in their destructor. See ~Thread below.
+//
// After the thread is stopped, the destruction sequence is:
//
// (1) Thread::CleanUp()
@@ -48,9 +50,13 @@ class BASE_EXPORT Thread : PlatformThread::Delegate {
// Destroys the thread, stopping it if necessary.
//
- // NOTE: If you are subclassing from Thread, and you wish for your CleanUp
- // method to be called, then you need to call Stop() from your destructor.
- //
+ // NOTE: All subclasses of Thread must call Stop() in their
+ // destructor, or otherwise ensure Stop() is called before the
+ // subclass is destructed. This is required to avoid a data race
+ // between the destructor modifying the vtable, and the thread's
+ // ThreadMain calling the virtual method Run. It also ensures that
+ // the CleanUp() virtual method is called on the subclass before it
+ // is destructed.
virtual ~Thread();
// Starts the thread. Returns true if the thread was successfully started;
« no previous file with comments | « base/memory/weak_ptr_unittest.cc ('k') | base/threading/thread_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698