summaryrefslogtreecommitdiffstats
path: root/jingle/glue/thread_wrapper.cc
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-06 23:16:42 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-06 23:16:42 +0000
commit00f0b81e684035f705e44b818bb039bbeae2c274 (patch)
tree6357372615e1822f5e98fdcdffe6c07d814cd801 /jingle/glue/thread_wrapper.cc
parentf0dbe56c5e204e4b2945a33732faabf9aafc3229 (diff)
downloadchromium_src-00f0b81e684035f705e44b818bb039bbeae2c274.zip
chromium_src-00f0b81e684035f705e44b818bb039bbeae2c274.tar.gz
chromium_src-00f0b81e684035f705e44b818bb039bbeae2c274.tar.bz2
P2P Transport implementation.
TEST=Unittests. BUG=None Review URL: http://codereview.chromium.org/6791023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80717 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'jingle/glue/thread_wrapper.cc')
-rw-r--r--jingle/glue/thread_wrapper.cc23
1 files changed, 20 insertions, 3 deletions
diff --git a/jingle/glue/thread_wrapper.cc b/jingle/glue/thread_wrapper.cc
index f4551de..fe26094 100644
--- a/jingle/glue/thread_wrapper.cc
+++ b/jingle/glue/thread_wrapper.cc
@@ -6,6 +6,25 @@
namespace jingle_glue {
+// static
+void JingleThreadWrapper::EnsureForCurrentThread() {
+ talk_base::Thread* current_thread = talk_base::Thread::Current();
+ // If JingleThreadWrapper already exists for the current thread then
+ // it is returned by talk_base::Thread::Current().
+ // talk_base::Thread::Current() may also return non-null value for
+ // the main thread because talk_base::ThreadManager creates
+ // talk_base::Thread object for it. IsOwned() allows to distinguish
+ // talk_base::Thread object created by talk_base::ThreadManager from
+ // other talk_base::Thread objects. Because talk_base::Thread
+ // objects should never created by chromium code, we can assume that
+ // if talk_base::Thread::Current() returns non-null value and it
+ // isn't the object created by talk_base::ThreadManager then
+ // JingleThreadWrapper already exists for the current thread.
+ if (current_thread == NULL || !current_thread->IsOwned()) {
+ new JingleThreadWrapper(MessageLoop::current());
+ }
+}
+
JingleThreadWrapper::JingleThreadWrapper(MessageLoop* message_loop)
: message_loop_(message_loop) {
DCHECK_EQ(message_loop_, MessageLoop::current());
@@ -95,10 +114,8 @@ void JingleThreadWrapper::RunTask(int task_id) {
}
}
- if (have_message) {
+ if (have_message)
message.phandler->OnMessage(&message);
- delete message.pdata;
- }
}
// All methods below are marked as not reached. See comments in the