summaryrefslogtreecommitdiffstats
path: root/base/thread.cc
Commit message (Collapse)AuthorAgeFilesLines
* Move base/thread.h to base/threading, fix up callers to use the new location.brettw@chromium.org2011-01-011-180/+0
| | | | | | | | TEST=it compiles BUG=none Review URL: http://codereview.chromium.org/6028009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70345 0039d316-1c4b-4281-b951-d872f2087c98
* Move thread local stuff from base to base/threading and consistently use thebrettw@chromium.org2010-12-301-1/+1
| | | | | | | | | | | base namespace. This also fixes references to TLSSlot to base::ThreadLocalStorage::Slot. TEST=it compiles BUG=none Review URL: http://codereview.chromium.org/5986012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70322 0039d316-1c4b-4281-b951-d872f2087c98
* Revert "Protect reading and writing startup_data_"agl@chromium.org2010-12-161-16/+3
| | | | | | This reverts commit r69438. It may have broken Linux dbg-shlib. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69466 0039d316-1c4b-4281-b951-d872f2087c98
* Protect reading and writing startup_data_agl@chromium.org2010-12-161-3/+16
| | | | | | | | | | | | | | Protect reading and writing startup_data_ to ensure intruction order and to ensure the value is correctly read in the new thread. Contributed by phanna (Android) BUG=67145 TEST=none http://codereview.chromium.org/5933002/ git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69438 0039d316-1c4b-4281-b951-d872f2087c98
* Switch to using kInvalidThreadId instead of 0.willchan@chromium.org2010-11-221-2/+2
| | | | | | | | | BUG=none TEST=none Review URL: http://codereview.chromium.org/5266001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67011 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 58786 - Adding debugging info for thread name.eroman@chromium.org2010-09-111-18/+0
| | | | | | | | | | | | | This temporary instrumentation has already yielded the intended data, so it is no longer necessary. BUG=54307 Review URL: http://codereview.chromium.org/3337012 TBR=huanr@chromium.org Review URL: http://codereview.chromium.org/3322020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@59178 0039d316-1c4b-4281-b951-d872f2087c98
* Adding debugging info for thread name.huanr@chromium.org2010-09-081-0/+18
| | | | | | | | | | | | This may not provide enough information to analyze the bug, but it is a start with minimal impact. BUG=54307 TEST=none Review URL: http://codereview.chromium.org/3337012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58786 0039d316-1c4b-4281-b951-d872f2087c98
* Header cleanup in base.brettw@chromium.org2010-08-171-1/+0
| | | | | | | | | | | | | | This makes uses of StringPrintf and friends use the base namespace and include stringprintf.h explicitly. This also removes a bunch of unnecessary string_util includes (which exposed a few other errors like people forgetting to include <vector>. TEST=it compiles BUG=none Review URL: http://codereview.chromium.org/3119022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@56446 0039d316-1c4b-4281-b951-d872f2087c98
* Fix an issue in Thread class where we initialize a pointer, whichhuanr@chromium.org2010-07-231-3/+8
| | | | | | | | | | | is a class member, with stack variable and keep its value. BUG=48772 TEST=none Review URL: http://codereview.chromium.org/3045008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@53438 0039d316-1c4b-4281-b951-d872f2087c98
* Annotate a benign data race in Thread::StopSoontimurrrr@chromium.org2010-05-191-1/+4
| | | | | | | | BUG=23245 TEST=TSan bots Review URL: http://codereview.chromium.org/2136013 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47639 0039d316-1c4b-4281-b951-d872f2087c98
* Update dynamic annotations and move them to base/third_partytimurrrr@chromium.org2010-05-141-1/+1
| | | | | | Review URL: http://codereview.chromium.org/1992005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47252 0039d316-1c4b-4281-b951-d872f2087c98
* Created a stock implementation of the MessageLoopProxy interface than can be ↵sanjeevr@chromium.org2010-05-061-0/+2
| | | | | | | | | | | used to create an implementation that targets the current thread's message loop. BUG=None TEST=Unit tests provided. Review URL: http://codereview.chromium.org/1837003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@46591 0039d316-1c4b-4281-b951-d872f2087c98
* Add a Thread::CleanUpAfterMessageLoopDestruction() method which gets called ↵eroman@chromium.org2010-04-141-22/+25
| | | | | | | | | | after the message loop has been destroyed. BUG=39723 TEST=ThreadTest.CleanUp Review URL: http://codereview.chromium.org/1593023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44532 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting this CL as it causes chrome frame net tests to crash at exit. The ↵ananta@chromium.org2010-04-131-24/+20
| | | | | | | | | | | | | | | | | | | | | crash happens because the IPC channel proxy code relies on the listener threads message loop being around. This change destroys the message loop when it goes out of scope leading to the crash. Revert 44323 - Don't call Thread::CleanUp() before the MessageLoop destruction observers have run. This is consistent with the comment for Thread::CleanUp(), which says it runs after the message loop has "stopped". Certain consumers depend on this ordering to avoid accessing variables which are deleted by Thread::CleanUp(). BUG=39723 TEST=ThreadTest.CleanUp Review URL: http://codereview.chromium.org/1540002 TBR=eroman@chromium.org Review URL: http://codereview.chromium.org/1528034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44357 0039d316-1c4b-4281-b951-d872f2087c98
* Don't call Thread::CleanUp() before the MessageLoop destruction observers ↵eroman@chromium.org2010-04-131-20/+24
| | | | | | | | | | | | | have run. This is consistent with the comment for Thread::CleanUp(), which says it runs after the message loop has "stopped". Certain consumers depend on this ordering to avoid accessing variables which are deleted by Thread::CleanUp(). BUG=39723 TEST=ThreadTest.CleanUp Review URL: http://codereview.chromium.org/1540002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@44323 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 43127 [It resulted in a free memory write because of a consumer that ↵eroman@chromium.org2010-03-311-24/+20
| | | | | | | | | | | | | | | | | | | was relying on the old ordering (BUG=39932).] Don't call Thread::CleanUp() before the MessageLoop destruction observers have run. This is consistent with the comment for Thread::CleanUp(), which says it runs after the message loop has "stopped". Certain consumers depend on this ordering to avoid accessing variables which are deleted by Thread::CleanUp(). BUG=39723 TEST=ThreadTest.CleanUp Review URL: http://codereview.chromium.org/1540002 TBR=eroman@chromium.org Review URL: http://codereview.chromium.org/1517006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43174 0039d316-1c4b-4281-b951-d872f2087c98
* Don't call Thread::CleanUp() before the MessageLoop destruction observers ↵eroman@chromium.org2010-03-301-20/+24
| | | | | | | | | | | | | | have run. This is consistent with the comment for Thread::CleanUp(), which says it runs after the message loop has "stopped". Certain consumers depend on this ordering to avoid accessing variables which are deleted by Thread::CleanUp(). BUG=39723 TEST=ThreadTest.CleanUp Review URL: http://codereview.chromium.org/1540002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@43127 0039d316-1c4b-4281-b951-d872f2087c98
* Notify race detectors (e.g. ThreadSanitizer) about the thread namestimurrrr@chromium.org2009-11-231-0/+2
| | | | | | | | | ThreadSanitizer will print the name of the threads in data race reports. ANNOTATE_THREAD_NAME is a no-op in Release non-valgrind build Review URL: http://codereview.chromium.org/434009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32821 0039d316-1c4b-4281-b951-d872f2087c98
* Fix a harmless data race in Threadtimurrrr@chromium.org2009-09-211-1/+1
| | | | | | | | | | | Currently, if StopSoon/Stop is called twice (like in ThreadTest.StopSoon) message_loop_ can be accessed simultaneously by ThreadMain():162 and in StopSoon():124. This data race is harmless since stopping_==true, so message_loop_ value is actually un-needed. I'd like to swap the conditions to avoid reading message_loop_ in case stopping_==true. This way ThreadTest.StopSoon will have no race reports under ThreadSanitizer. Currently, this is the only report on base_unittests on ThreadSanitizer linux bot. Review URL: http://codereview.chromium.org/207039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26691 0039d316-1c4b-4281-b951-d872f2087c98
* Fix a flaky crash in Thread by guarding access to message_loop_ more carefully.phajdan.jr@chromium.org2009-09-141-18/+11
| | | | | | | | | | | | | | | | There was a window when message_loop_ could be non-NULL and invalid. The code assumed that when message_loop_ is non-NULL, it's valid. Added a stopping_ flag which indicates a state in which we shouldn't access the message loop because it is not safe. Also, reused StopSoon logic in Stop and fixed a comment which was inaccurate. TEST=Covered by base_unittests. BUG=15331 Review URL: http://codereview.chromium.org/201108 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26180 0039d316-1c4b-4281-b951-d872f2087c98
* Retry 25770 after fixing Valgrind issue.huanr@chromium.org2009-09-101-1/+5
| | | | | | | | | | | | | Enable database logging on history thread. Original review: http://codereview.chromium.org/198011 BUG=16591 TEST=History UI test Review URL: http://codereview.chromium.org/194067 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25842 0039d316-1c4b-4281-b951-d872f2087c98
* Revert r25770 due to valgrind failures on Linux.huanr@chromium.org2009-09-091-5/+1
| | | | | | | | | TEST=none. BUG=none. Review URL: http://codereview.chromium.org/199065 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25781 0039d316-1c4b-4281-b951-d872f2087c98
* Enable database logging on history thread.huanr@chromium.org2009-09-091-1/+5
| | | | | | | | | BUG=16591 TEST=History UI test Review URL: http://codereview.chromium.org/198011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25770 0039d316-1c4b-4281-b951-d872f2087c98
* Implementation of Pipeline and FilterHost interfaces. This is a large ↵ralphl@chromium.org2009-01-281-2/+5
| | | | | | | | | | | | change, but all of the objects are interrelated. I am also checking in a basic unit test that creates pipeline, and the data source hangs during initialization. The test sleeps one second and then stops the pipeline. Andrew has already done a first pass on this, and the code has come largely from our working experimental branch. Review URL: http://codereview.chromium.org/18546 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8805 0039d316-1c4b-4281-b951-d872f2087c98
* Moved Init() before startup_data_->event.Signal() because derivedjrg@chromium.org2009-01-271-3/+4
| | | | | | | | | | | | | | | classes may not be safe to use until Init() has been called. As an example, RenderThread() creates it's IPC::SyncChannel in Init(), so it isn't safe to call Send() method until after. Update use of a Thread (hit with ui_tests) to no longer require Init() be called after the startup event is signaled (required old thread behavior). Ran a bunch more tests on Windows to try harder to make sure I didn't break anything. Review URL: http://codereview.chromium.org/18824 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8695 0039d316-1c4b-4281-b951-d872f2087c98
* Review URL: http://codereview.chromium.org/18690jrg@chromium.org2009-01-221-4/+3
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8506 0039d316-1c4b-4281-b951-d872f2087c98
* Moved Init() startup_data_->event.Signal() because derived classes mayjrg@chromium.org2009-01-221-3/+4
| | | | | | | | | | | | not be safe to use until Init() has been called. As an example, RenderThread() creates it's IPC::SyncChannel in Init(), so it isn't safe to call Send() method until after. Change tested explicitly on Mac Win Linux. Review URL: http://codereview.chromium.org/18508 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8485 0039d316-1c4b-4281-b951-d872f2087c98
* Reapply 5971 which was reverted in 5974. The unit test wasn't unregistering ↵maruel@chromium.org2008-12-011-3/+0
| | | | | | | | the observer correctly. Review URL: http://codereview.chromium.org/12474 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6142 0039d316-1c4b-4281-b951-d872f2087c98
* Reverting 5971.maruel@chromium.org2008-11-251-0/+3
| | | | | | Review URL: http://codereview.chromium.org/12637 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5974 0039d316-1c4b-4281-b951-d872f2087c98
* Add superficial unit test for PrintJob. That's a start.maruel@chromium.org2008-11-251-3/+0
| | | | | | | | Add more DCHECKs. Same as r5607 except that Thread.StopSoon is fixed. Review URL: http://codereview.chromium.org/11534 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5971 0039d316-1c4b-4281-b951-d872f2087c98
* Revert 5607 because it caused a base_unittest failure.maruel@chromium.org2008-11-181-0/+3
| | | | | | Review URL: http://codereview.chromium.org/11234 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5608 0039d316-1c4b-4281-b951-d872f2087c98
* Add superficial unit test for PrintJob. That's a start.maruel@chromium.org2008-11-181-3/+0
| | | | | | | Add more DCHECKs. Review URL: http://codereview.chromium.org/10957 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5607 0039d316-1c4b-4281-b951-d872f2087c98
* Move a bunch of code from the old to new TLS interface.deanm@chromium.org2008-09-101-11/+7
| | | | | | Review URL: http://codereview.chromium.org/1660 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1982 0039d316-1c4b-4281-b951-d872f2087c98
* Add ThreadLocalPointer and ThreadLocalBoolean abstractions, that will ↵deanm@google.com2008-09-031-8/+14
| | | | | | deprecate the old ThreadLocalStorage / TLSSlot APIs. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1678 0039d316-1c4b-4281-b951-d872f2087c98
* fix linux builddarin@google.com2008-08-261-1/+1
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1364 0039d316-1c4b-4281-b951-d872f2087c98
* Allow consumers of MessageLoop to specify the type of MessageLoop they want.darin@google.com2008-08-261-25/+42
| | | | | | | | | | | | | | | | This CL introduces a Type enum to MessageLoop, and I also created subclasses of MessageLoop corresponding to the non-default types: MessageLoopForIO and MessageLoopForUI. I moved all of the platform-specific MessageLoop APIs onto either MessageLoopForIO or MessageLoopForUI. MessageLoopForIO gets the Watcher API, and MessageLoopForUI gets the Observer and Dispatcher APIs. Under the hood, both are implemented in terms of MessagePumpWin, but that will change in a future CL. The Thread class is changed to allow the consumer to specify the Type of MessageLoop they want to have setup on the created thread. I re-organized message_loop_unittest.cc and timer_unittest.cc so that I could exercise all (or most) of the tests against each type of MessageLoop. Note: I know that "explicit MessageLoop(Type type = TYPE_DEFAULT);" is in violation to the style-guide's restriction against default arguments. I'm working on finding a decent solution to that problem. Please ignore this issue for now. The corresponding chrome/ changes are coming in a separate CL due to Reitveld data size limitations. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1362 0039d316-1c4b-4281-b951-d872f2087c98
* Make PlatformThread::SetName operate only on the current thread.deanm@google.com2008-08-251-1/+1
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1306 0039d316-1c4b-4281-b951-d872f2087c98
* Use a more compact license header in source files.license.bot2008-08-241-28/+4
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1287 0039d316-1c4b-4281-b951-d872f2087c98
* Port the Thread class properly to Mac and Linux. This involved portingdarin@google.com2008-08-211-106/+44
| | | | | | | | | | | | PlatformThread and creating an API on PlatformThread to create a native thread and later join with it. I also made a few other tweaks to PlatformThread, such as eliminating the Current() method which appears to be unused. The operator==() is also unused, so I killed it as well. I made a few other miscellaneous cleanups and adjustments. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1146 0039d316-1c4b-4281-b951-d872f2087c98
* TrackedObjects assumes you can use a "TLS slot" of -1 to indicate ↵evanm@google.com2008-08-201-4/+4
| | | | | | uninitialized. This isn't true for the pthread_key_t type, which is unsigned on Linux and reportedly a struct on Macs. This change modifies the Slot type to be a struct containing an "initialized" flag. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1122 0039d316-1c4b-4281-b951-d872f2087c98
* Revert. Failing unit tests.evanm@google.com2008-08-201-4/+4
| | | | git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1118 0039d316-1c4b-4281-b951-d872f2087c98
* TrackedObjects assumes you can use a "TLS slot" of -1 to indicate ↵evanm@google.com2008-08-201-4/+4
| | | | | | uninitialized. This isn't true for the pthread_key_t type, which is unsigned on Linux and reportedly a struct on Macs. This change modifies the Slot type to be a struct containing an "initialized" flag. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1113 0039d316-1c4b-4281-b951-d872f2087c98
* Introduce MessagePump to represent the native message pump used to drive adarin@google.com2008-08-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MessageLoop. A MessageLoop now has a MessagePump. This will make it possible to port the MessagePump interface to other platforms as well as to use an IO completion port for our worker threads on Windows. Currently, there is only MessagePumpWin, which attempts to preserve the pre-existing behavior of the MessageLoop. API changes to MessageLoop: 1. MessageLoop::Quit means return from Run when the MessageLoop would otherwise wait for more work. 2. MessageLoop::Quit can no longer be called outside the context of an active Run call. So, things like this: MessageLoop::current()->Quit(); MessageLoop::current()->Run(); are now: MessageLoop::current()->RunAllPending(); 3. MessageLoop::Quit can no longer be called from other threads. This means that PostTask(..., new MessageLoop::QuitTask()) must be used explicitly to Quit across thread boundaries. 4. No protection is made to deal with nested MessageLoops involving watched objects or APCs. In fact, an assertion is added to flag such cases. This is a temporary measure until object watching and APC facilities are removed in favor of a MessagePump designed around an IO completion port. As part of this CL, I also changed the automation system to use an IPC::ChannelProxy instead of an IPC::Channel. This moves the automation IPC onto Chrome's IO thread where it belongs. I also fixed some abuses of RefCounted in the AutomationProvider class. It was deleting itself in some cases! This led to having to fix the ownership model for AutomationProvider, which explains the changes to AutomationProviderList and so on. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@928 0039d316-1c4b-4281-b951-d872f2087c98
* - Add Thread::StopSoon() and remove Thread::NonBlockingStop(). StopSoon() ↵maruel@google.com2008-08-121-52/+34
| | | | | | | | | | | | can't be implemented externally of the Thread class where NonBlockingStop() was really just an helper function solely used in printing. - Move two member functions access from public to protected. - Add documentation about which thread modifies which member variable. - Simplify ThreadStartInfo. This removes one heap allocation. - Improve unit test coverage. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@728 0039d316-1c4b-4281-b951-d872f2087c98
* Provide cross-platform implementation of WaitableEvent for use on Mac and Linux.darin@google.com2008-08-111-10/+5
| | | | | | | | | I gave the file the suffix _generic since it is implemented entirely in terms of other APIs in base. This CL also adds a simple unit test for WaitableEvent, and I switched some code in thread.cc over to using WaitableEvent. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@648 0039d316-1c4b-4281-b951-d872f2087c98
* Port in threading for Posix. Will require fixes to MessageLoop and Task to ↵avi@google.com2008-08-071-1/+1
| | | | | | compile on the Mac, though. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@532 0039d316-1c4b-4281-b951-d872f2087c98
* Revise the ObjectWatcher API to be one-to-one with the object being watched. ↵darin@google.com2008-08-041-10/+10
| | | | | | | | | | | | This greatly simplifies the implementation and API. Now consumers can use ObjectWatcher as a "smart pointer" class, which automatically cleans-up after itself when it goes out of scope. I also switched away from the Task based API to one that is more compatible with MessageLoop::WatchObject. That allows me to make minimal changes to existing code, and it also means that consumers do not have to allocate Task objects to use this API. In this CL, I included changes to make a couple consumers use ObjectWatcher instead of ML::WatchObject. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@322 0039d316-1c4b-4281-b951-d872f2087c98
* Fix most issues when building base as a x64 target.maruel@google.com2008-07-301-1/+1
| | | | | | BUG=1282556 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112 0039d316-1c4b-4281-b951-d872f2087c98
* Add base to the repository.initial.commit2008-07-261-0/+258
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8 0039d316-1c4b-4281-b951-d872f2087c98