| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved. |    2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved. | 
|    3  * |    3  * | 
|    4  *  Use of this source code is governed by a BSD-style license |    4  *  Use of this source code is governed by a BSD-style license | 
|    5  *  that can be found in the LICENSE file in the root of the source |    5  *  that can be found in the LICENSE file in the root of the source | 
|    6  *  tree. An additional intellectual property rights grant can be found |    6  *  tree. An additional intellectual property rights grant can be found | 
|    7  *  in the file PATENTS.  All contributing project authors may |    7  *  in the file PATENTS.  All contributing project authors may | 
|    8  *  be found in the AUTHORS file in the root of the source tree. |    8  *  be found in the AUTHORS file in the root of the source tree. | 
|    9  */ |    9  */ | 
|   10  |   10  | 
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   87   Runnable() {} |   87   Runnable() {} | 
|   88  |   88  | 
|   89  private: |   89  private: | 
|   90   RTC_DISALLOW_COPY_AND_ASSIGN(Runnable); |   90   RTC_DISALLOW_COPY_AND_ASSIGN(Runnable); | 
|   91 }; |   91 }; | 
|   92  |   92  | 
|   93 // WARNING! SUBCLASSES MUST CALL Stop() IN THEIR DESTRUCTORS!  See ~Thread(). |   93 // WARNING! SUBCLASSES MUST CALL Stop() IN THEIR DESTRUCTORS!  See ~Thread(). | 
|   94  |   94  | 
|   95 class Thread : public MessageQueue { |   95 class Thread : public MessageQueue { | 
|   96  public: |   96  public: | 
|   97   explicit Thread(SocketServer* ss = NULL); |   97   // Create a new Thread and optionally assign it to the passed SocketServer. | 
 |   98   // Subclasses that override Clear should pass false for init_queue and call | 
 |   99   // DoInit() from their constructor to prevent races with the | 
 |  100   // MessageQueueManager already using the object while the vtable is still | 
 |  101   // being created. | 
 |  102   explicit Thread(SocketServer* ss = nullptr, bool init_queue = true); | 
 |  103  | 
|   98   // NOTE: ALL SUBCLASSES OF Thread MUST CALL Stop() IN THEIR DESTRUCTORS (or |  104   // NOTE: ALL SUBCLASSES OF Thread MUST CALL Stop() IN THEIR DESTRUCTORS (or | 
|   99   // guarantee Stop() is explicitly called before the subclass is destroyed). |  105   // guarantee Stop() is explicitly called before the subclass is destroyed). | 
|  100   // This is required to avoid a data race between the destructor modifying the |  106   // This is required to avoid a data race between the destructor modifying the | 
|  101   // vtable, and the Thread::PreRun calling the virtual method Run(). |  107   // vtable, and the Thread::PreRun calling the virtual method Run(). | 
|  102   ~Thread() override; |  108   ~Thread() override; | 
|  103  |  109  | 
|  104   static Thread* Current(); |  110   static Thread* Current(); | 
|  105  |  111  | 
|  106   // Used to catch performance regressions. Use this to disallow blocking calls |  112   // Used to catch performance regressions. Use this to disallow blocking calls | 
|  107   // (Invoke) for a given scope.  If a synchronous call is made while this is in |  113   // (Invoke) for a given scope.  If a synchronous call is made while this is in | 
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  278  |  284  | 
|  279   RTC_DISALLOW_COPY_AND_ASSIGN(Thread); |  285   RTC_DISALLOW_COPY_AND_ASSIGN(Thread); | 
|  280 }; |  286 }; | 
|  281  |  287  | 
|  282 // AutoThread automatically installs itself at construction |  288 // AutoThread automatically installs itself at construction | 
|  283 // uninstalls at destruction, if a Thread object is |  289 // uninstalls at destruction, if a Thread object is | 
|  284 // _not already_ associated with the current OS thread. |  290 // _not already_ associated with the current OS thread. | 
|  285  |  291  | 
|  286 class AutoThread : public Thread { |  292 class AutoThread : public Thread { | 
|  287  public: |  293  public: | 
|  288   explicit AutoThread(SocketServer* ss = 0); |  294   explicit AutoThread(SocketServer* ss = nullptr); | 
|  289   ~AutoThread() override; |  295   ~AutoThread() override; | 
|  290  |  296  | 
|  291  private: |  297  private: | 
|  292   RTC_DISALLOW_COPY_AND_ASSIGN(AutoThread); |  298   RTC_DISALLOW_COPY_AND_ASSIGN(AutoThread); | 
|  293 }; |  299 }; | 
|  294  |  300  | 
|  295 // Win32 extension for threads that need to use COM |  301 // Win32 extension for threads that need to use COM | 
|  296 #if defined(WEBRTC_WIN) |  302 #if defined(WEBRTC_WIN) | 
|  297 class ComThread : public Thread { |  303 class ComThread : public Thread { | 
|  298  public: |  304  public: | 
|  299   ComThread() {} |  305   ComThread() {} | 
|  300   virtual ~ComThread() { Stop(); } |  306   ~ComThread() override { Stop(); } | 
|  301  |  307  | 
|  302  protected: |  308  protected: | 
|  303   virtual void Run(); |  309   void Run() override; | 
|  304  |  310  | 
|  305  private: |  311  private: | 
|  306   RTC_DISALLOW_COPY_AND_ASSIGN(ComThread); |  312   RTC_DISALLOW_COPY_AND_ASSIGN(ComThread); | 
|  307 }; |  313 }; | 
|  308 #endif |  314 #endif | 
|  309  |  315  | 
|  310 // Provides an easy way to install/uninstall a socketserver on a thread. |  316 // Provides an easy way to install/uninstall a socketserver on a thread. | 
|  311 class SocketServerScope { |  317 class SocketServerScope { | 
|  312  public: |  318  public: | 
|  313   explicit SocketServerScope(SocketServer* ss) { |  319   explicit SocketServerScope(SocketServer* ss) { | 
|  314     old_ss_ = Thread::Current()->socketserver(); |  320     old_ss_ = Thread::Current()->socketserver(); | 
|  315     Thread::Current()->set_socketserver(ss); |  321     Thread::Current()->set_socketserver(ss); | 
|  316   } |  322   } | 
|  317   ~SocketServerScope() { |  323   ~SocketServerScope() { | 
|  318     Thread::Current()->set_socketserver(old_ss_); |  324     Thread::Current()->set_socketserver(old_ss_); | 
|  319   } |  325   } | 
|  320  |  326  | 
|  321  private: |  327  private: | 
|  322   SocketServer* old_ss_; |  328   SocketServer* old_ss_; | 
|  323  |  329  | 
|  324   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(SocketServerScope); |  330   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(SocketServerScope); | 
|  325 }; |  331 }; | 
|  326  |  332  | 
|  327 }  // namespace rtc |  333 }  // namespace rtc | 
|  328  |  334  | 
|  329 #endif  // WEBRTC_BASE_THREAD_H_ |  335 #endif  // WEBRTC_BASE_THREAD_H_ | 
| OLD | NEW |