mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
Windows: Fix DCHECKs during shutdown with multi-threaded message loop mode (issue #2362)
This commit is contained in:
@@ -13,10 +13,20 @@ index 3723960a5c0c..fa924f020f4e 100644
|
||||
MessageLoopCurrentForUI MessageLoopForUI::current() {
|
||||
return MessageLoopCurrentForUI::Get();
|
||||
diff --git base/message_loop/message_loop.h base/message_loop/message_loop.h
|
||||
index 7c31a128b53d..8d9dfdbc2a68 100644
|
||||
index 7c31a128b53d..7549d388cccb 100644
|
||||
--- base/message_loop/message_loop.h
|
||||
+++ base/message_loop/message_loop.h
|
||||
@@ -351,6 +351,7 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate,
|
||||
@@ -195,6 +195,9 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate,
|
||||
// Runs the specified PendingTask.
|
||||
void RunTask(PendingTask* pending_task);
|
||||
|
||||
+ // Called from Thread::CleanUp() to release resources.
|
||||
+ void ReleasePump() { pump_ = nullptr; }
|
||||
+
|
||||
//----------------------------------------------------------------------------
|
||||
protected:
|
||||
std::unique_ptr<MessagePump> pump_;
|
||||
@@ -351,6 +354,7 @@ class BASE_EXPORT MessageLoop : public MessagePump::Delegate,
|
||||
class BASE_EXPORT MessageLoopForUI : public MessageLoop {
|
||||
public:
|
||||
explicit MessageLoopForUI(Type type = TYPE_UI);
|
||||
@@ -24,6 +34,19 @@ index 7c31a128b53d..8d9dfdbc2a68 100644
|
||||
|
||||
// TODO(gab): Mass migrate callers to MessageLoopCurrentForUI::Get()/IsSet().
|
||||
static MessageLoopCurrentForUI current();
|
||||
diff --git base/message_loop/message_loop_current.cc base/message_loop/message_loop_current.cc
|
||||
index 4959b70e0676..fdffe799433f 100644
|
||||
--- base/message_loop/message_loop_current.cc
|
||||
+++ base/message_loop/message_loop_current.cc
|
||||
@@ -43,6 +43,8 @@ void MessageLoopCurrent::AddDestructionObserver(
|
||||
|
||||
void MessageLoopCurrent::RemoveDestructionObserver(
|
||||
DestructionObserver* destruction_observer) {
|
||||
+ if (!current_)
|
||||
+ return;
|
||||
DCHECK_CALLED_ON_VALID_THREAD(current_->bound_thread_checker_);
|
||||
current_->destruction_observers_.RemoveObserver(destruction_observer);
|
||||
}
|
||||
diff --git base/message_loop/message_loop_current.h base/message_loop/message_loop_current.h
|
||||
index 61d1607e31e7..656b3a9c9f68 100644
|
||||
--- base/message_loop/message_loop_current.h
|
||||
|
Reference in New Issue
Block a user