summaryrefslogtreecommitdiffstats
path: root/third_party/libjingle/files/talk/base/signalthread.cc
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-03 04:08:18 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-03 04:08:18 +0000
commit7b7a16b523c98c2bbf435716128f3682dfff64d6 (patch)
treec9648370093a3bf30910762eb40df427a3ddd64b /third_party/libjingle/files/talk/base/signalthread.cc
parenta0c30347181cc7e5a5a6dc26b00ecd6f0caf0e97 (diff)
downloadchromium_src-7b7a16b523c98c2bbf435716128f3682dfff64d6.zip
chromium_src-7b7a16b523c98c2bbf435716128f3682dfff64d6.tar.gz
chromium_src-7b7a16b523c98c2bbf435716128f3682dfff64d6.tar.bz2
New libjingle integrated to chrome.
BUG=none TEST=Chrome Sync works Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=48798 Review URL: http://codereview.chromium.org/2255007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@48811 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/libjingle/files/talk/base/signalthread.cc')
-rw-r--r--third_party/libjingle/files/talk/base/signalthread.cc128
1 files changed, 0 insertions, 128 deletions
diff --git a/third_party/libjingle/files/talk/base/signalthread.cc b/third_party/libjingle/files/talk/base/signalthread.cc
deleted file mode 100644
index c9ac86a..0000000
--- a/third_party/libjingle/files/talk/base/signalthread.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-#include "talk/base/common.h"
-#include "talk/base/signalthread.h"
-
-using namespace talk_base;
-
-///////////////////////////////////////////////////////////////////////////////
-// SignalThread
-///////////////////////////////////////////////////////////////////////////////
-
-SignalThread::SignalThread()
-: main_(Thread::Current()), state_(kInit)
-{
- main_->SignalQueueDestroyed.connect(this,
- &SignalThread::OnMainThreadDestroyed);
- refcount_ = 1;
- worker_.parent_ = this;
-}
-
-void SignalThread::OnMainThreadDestroyed() {
- EnterExit ee(this);
- main_ = NULL;
-}
-
-SignalThread::~SignalThread() {
-}
-
-void SignalThread::SetPriority(ThreadPriority priority) {
- EnterExit ee(this);
- ASSERT(main_->IsCurrent());
- ASSERT(kInit == state_);
- worker_.SetPriority(priority);
-}
-
-void SignalThread::Start() {
- EnterExit ee(this);
- ASSERT(main_->IsCurrent());
- if (kInit == state_ || kComplete == state_) {
- state_ = kRunning;
- OnWorkStart();
- worker_.Start();
- } else {
- ASSERT(false);
- }
-}
-
-void SignalThread::Destroy(bool wait) {
- EnterExit ee(this);
- ASSERT(main_->IsCurrent());
- if ((kInit == state_) || (kComplete == state_)) {
- refcount_--;
- } else if (kRunning == state_ || kReleasing == state_) {
- state_ = kStopping;
- // OnWorkStop() must follow Quit(), so that when the thread wakes up due to
- // OWS(), ContinueWork() will return false.
- if (wait) {
- // Release the thread's lock so that it can return from ::Run.
- cs_.Leave();
- worker_.Stop();
- cs_.Enter();
- refcount_--;
- } else {
- worker_.Quit();
- }
- OnWorkStop();
- } else {
- ASSERT(false);
- }
-}
-
-void SignalThread::Release() {
- EnterExit ee(this);
- ASSERT(main_->IsCurrent());
- if (kComplete == state_) {
- refcount_--;
- } else if (kRunning == state_) {
- state_ = kReleasing;
- } else {
- // if (kInit == state_) use Destroy()
- ASSERT(false);
- }
-}
-
-bool SignalThread::ContinueWork() {
- EnterExit ee(this);
- ASSERT(worker_.IsCurrent());
- return worker_.ProcessMessages(0);
-}
-
-void SignalThread::OnMessage(Message *msg) {
- EnterExit ee(this);
- if (ST_MSG_WORKER_DONE == msg->message_id) {
- ASSERT(main_->IsCurrent());
- OnWorkDone();
- bool do_delete = false;
- if (kRunning == state_) {
- state_ = kComplete;
- } else {
- do_delete = true;
- }
- if (kStopping != state_) {
- // Before signaling that the work is done, make sure that the worker
- // thread actually is done. We got here because DoWork() finished and
- // Run() posted the ST_MSG_WORKER_DONE message. This means the worker
- // thread is about to go away anyway, but sometimes it doesn't actually
- // finish before SignalWorkDone is processed, and for a reusable
- // SignalThread this makes an assert in thread.cc fire.
- //
- // Calling Stop() on the worker ensures that the OS thread that underlies
- // the worker will finish, and will be set to NULL, enabling us to call
- // Start() again.
- worker_.Stop();
- SignalWorkDone(this);
- }
- if (do_delete) {
- refcount_--;
- }
- }
-}
-
-void SignalThread::Run() {
- DoWork();
- {
- EnterExit ee(this);
- if (main_) {
- main_->Post(this, ST_MSG_WORKER_DONE);
- }
- }
-}