// LLDB C++ API Test: verify the event description as obtained by calling
// SBEvent::GetCStringFromEvent that is received by an
// SBListener object registered with a process with a breakpoint.
#include <atomic>
#include <iostream>
#include <string>
#include <thread>
%include_SB_APIs%
#include "common.h"
using namespace lldb;
using namespace std;
// listener thread control
extern atomic<bool> g_done;
// used by listener thread to communicate a successful process continue command
// back to the checking thread.
multithreaded_queue<bool> g_process_started;
extern SBListener g_listener;
void listener_func() {
while (!g_done) {
SBEvent event;
bool got_event = g_listener.WaitForEvent(1, event);
if (got_event) {
if (!event.IsValid())
throw Exception("event is not valid in listener thread");
SBProcess process = SBProcess::GetProcessFromEvent(event);
if (process.GetState() == eStateStopped) {
SBError error = process.Continue();
if (!error.Success())
throw Exception(string("Cannot continue process from listener thread: ")
+ error.GetCString());
g_process_started.push(true);
}
}
}
}
void check_listener(SBDebugger &dbg) {
bool got_message = false;
while (!got_message)
g_process_started.pop(5, got_message);
g_done = true;
}