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 Andricvoid 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 Andricvoid 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