Update talk to 51314459

R=mallinath@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2100004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4608 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
sergeyu@chromium.org
2013-08-23 23:21:25 +00:00
parent b2c28c3699
commit 0be6aa0665
42 changed files with 1196 additions and 399 deletions

View File

@@ -42,7 +42,7 @@ const uint32 kMaxMsgLatency = 150; // 150 ms
//------------------------------------------------------------------
// MessageQueueManager
MessageQueueManager* MessageQueueManager::instance_;
MessageQueueManager* MessageQueueManager::instance_ = NULL;
MessageQueueManager* MessageQueueManager::Instance() {
// Note: This is not thread safe, but it is first called before threads are
@@ -52,6 +52,10 @@ MessageQueueManager* MessageQueueManager::Instance() {
return instance_;
}
bool MessageQueueManager::IsInitialized() {
return instance_ != NULL;
}
MessageQueueManager::MessageQueueManager() {
}
@@ -59,6 +63,9 @@ MessageQueueManager::~MessageQueueManager() {
}
void MessageQueueManager::Add(MessageQueue *message_queue) {
return Instance()->AddInternal(message_queue);
}
void MessageQueueManager::AddInternal(MessageQueue *message_queue) {
// MessageQueueManager methods should be non-reentrant, so we
// ASSERT that is the case. If any of these ASSERT, please
// contact bpm or jbeda.
@@ -68,6 +75,12 @@ void MessageQueueManager::Add(MessageQueue *message_queue) {
}
void MessageQueueManager::Remove(MessageQueue *message_queue) {
// If there isn't a message queue manager instance, then there isn't a queue
// to remove.
if (!instance_) return;
return Instance()->RemoveInternal(message_queue);
}
void MessageQueueManager::RemoveInternal(MessageQueue *message_queue) {
ASSERT(!crit_.CurrentThreadIsOwner()); // See note above.
// If this is the last MessageQueue, destroy the manager as well so that
// we don't leak this object at program shutdown. As mentioned above, this is
@@ -91,6 +104,12 @@ void MessageQueueManager::Remove(MessageQueue *message_queue) {
}
void MessageQueueManager::Clear(MessageHandler *handler) {
// If there isn't a message queue manager instance, then there aren't any
// queues to remove this handler from.
if (!instance_) return;
return Instance()->ClearInternal(handler);
}
void MessageQueueManager::ClearInternal(MessageHandler *handler) {
ASSERT(!crit_.CurrentThreadIsOwner()); // See note above.
CritScope cs(&crit_);
std::vector<MessageQueue *>::iterator iter;
@@ -122,7 +141,7 @@ MessageQueue::~MessageQueue() {
// is going away.
SignalQueueDestroyed();
if (active_) {
MessageQueueManager::Instance()->Remove(this);
MessageQueueManager::Remove(this);
Clear(NULL);
}
if (ss_) {
@@ -381,7 +400,7 @@ void MessageQueue::EnsureActive() {
ASSERT(crit_.CurrentThreadIsOwner());
if (!active_) {
active_ = true;
MessageQueueManager::Instance()->Add(this);
MessageQueueManager::Add(this);
}
}