xref: /src/contrib/llvm-project/lldb/source/Host/common/MainLoopBase.cpp (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
1e3b55780SDimitry Andric //===-- MainLoopBase.cpp --------------------------------------------------===//
2e3b55780SDimitry Andric //
3e3b55780SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4e3b55780SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5e3b55780SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6e3b55780SDimitry Andric //
7e3b55780SDimitry Andric //===----------------------------------------------------------------------===//
8e3b55780SDimitry Andric 
9e3b55780SDimitry Andric #include "lldb/Host/MainLoopBase.h"
10e3b55780SDimitry Andric 
11e3b55780SDimitry Andric using namespace lldb;
12e3b55780SDimitry Andric using namespace lldb_private;
13e3b55780SDimitry Andric 
AddPendingCallback(const Callback & callback)14e3b55780SDimitry Andric void MainLoopBase::AddPendingCallback(const Callback &callback) {
15e3b55780SDimitry Andric   {
16e3b55780SDimitry Andric     std::lock_guard<std::mutex> lock{m_callback_mutex};
17e3b55780SDimitry Andric     m_pending_callbacks.push_back(callback);
18e3b55780SDimitry Andric   }
19e3b55780SDimitry Andric   TriggerPendingCallbacks();
20e3b55780SDimitry Andric }
21e3b55780SDimitry Andric 
ProcessPendingCallbacks()22e3b55780SDimitry Andric void MainLoopBase::ProcessPendingCallbacks() {
23e3b55780SDimitry Andric   // Move the callbacks to a local vector to avoid keeping m_pending_callbacks
24e3b55780SDimitry Andric   // locked throughout the calls.
25e3b55780SDimitry Andric   std::vector<Callback> pending_callbacks;
26e3b55780SDimitry Andric   {
27e3b55780SDimitry Andric     std::lock_guard<std::mutex> lock{m_callback_mutex};
28e3b55780SDimitry Andric     pending_callbacks = std::move(m_pending_callbacks);
29e3b55780SDimitry Andric   }
30e3b55780SDimitry Andric 
31e3b55780SDimitry Andric   for (const Callback &callback : pending_callbacks)
32e3b55780SDimitry Andric     callback(*this);
33e3b55780SDimitry Andric }
34