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