OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 FOR_EACH_OBSERVER(DestructionObserver, destruction_observers_, | 214 FOR_EACH_OBSERVER(DestructionObserver, destruction_observers_, |
215 WillDestroyCurrentMessageLoop()); | 215 WillDestroyCurrentMessageLoop()); |
216 | 216 |
217 thread_task_runner_handle_.reset(); | 217 thread_task_runner_handle_.reset(); |
218 | 218 |
219 // Tell the message_loop_proxy that we are dying. | 219 // Tell the message_loop_proxy that we are dying. |
220 static_cast<MessageLoopProxyImpl*>(message_loop_proxy_.get())-> | 220 static_cast<MessageLoopProxyImpl*>(message_loop_proxy_.get())-> |
221 WillDestroyCurrentMessageLoop(); | 221 WillDestroyCurrentMessageLoop(); |
222 message_loop_proxy_ = NULL; | 222 message_loop_proxy_ = NULL; |
223 | 223 |
| 224 // Stop the message pump and free any thread-bound resources. |
| 225 pump_->Shutdown(); |
| 226 |
224 // OK, now make it so that no one can find us. | 227 // OK, now make it so that no one can find us. |
225 lazy_tls_ptr.Pointer()->Set(NULL); | 228 lazy_tls_ptr.Pointer()->Set(NULL); |
226 | 229 |
227 #if defined(OS_WIN) | 230 #if defined(OS_WIN) |
228 // If we left the high-resolution timer activated, deactivate it now. | 231 // If we left the high-resolution timer activated, deactivate it now. |
229 // Doing this is not-critical, it is mainly to make sure we track | 232 // Doing this is not-critical, it is mainly to make sure we track |
230 // the high resolution timer activations properly in our unit tests. | 233 // the high resolution timer activations properly in our unit tests. |
231 if (!high_resolution_timer_expiration_.is_null()) { | 234 if (!high_resolution_timer_expiration_.is_null()) { |
232 Time::ActivateHighResolutionTimer(false); | 235 Time::ActivateHighResolutionTimer(false); |
233 high_resolution_timer_expiration_ = TimeTicks(); | 236 high_resolution_timer_expiration_ = TimeTicks(); |
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 fd, | 828 fd, |
826 persistent, | 829 persistent, |
827 mode, | 830 mode, |
828 controller, | 831 controller, |
829 delegate); | 832 delegate); |
830 } | 833 } |
831 | 834 |
832 #endif | 835 #endif |
833 | 836 |
834 } // namespace base | 837 } // namespace base |
OLD | NEW |