From 19734953c2659bb6b28ac447e5260bf4fc576c6b Mon Sep 17 00:00:00 2001 From: eidheim Date: Sat, 2 Jan 2016 11:59:49 +0100 Subject: [PATCH] Fixed crash when quitting juci in the middle of starting debug --- src/debug.cc | 1 - src/window.cc | 8 ++++++-- src/window.h | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/debug.cc b/src/debug.cc index ec6b9b8..bf463bc 100644 --- a/src/debug.cc +++ b/src/debug.cc @@ -258,7 +258,6 @@ void Debug::delete_debug() { kill(); if(debug_thread.joinable()) debug_thread.join(); - lldb::SBDebugger::Terminate(); } std::string Debug::get_value(const std::string &variable, const boost::filesystem::path &file_path, unsigned int line_nr) { diff --git a/src/window.cc b/src/window.cc index 483aa59..8354b6d 100644 --- a/src/window.cc +++ b/src/window.cc @@ -627,7 +627,7 @@ void Window::set_menu_actions() { entry_box.labels.emplace_back(); auto label_it=entry_box.labels.begin(); label_it->update=[label_it](int state, const std::string& message){ - label_it->set_text("Leave empty to let juCi++ deduce executable"); + label_it->set_text("Set empty to let juCi++ deduce executable"); }; label_it->update(0, ""); entry_box.entries.emplace_back(run_arguments, [this, project_path](const std::string& content){ @@ -793,7 +793,7 @@ void Window::set_menu_actions() { entry_box.labels.emplace_back(); auto label_it=entry_box.labels.begin(); label_it->update=[label_it](int state, const std::string& message){ - label_it->set_text("Leave empty to let juCi++ deduce executable"); + label_it->set_text("Set empty to let juCi++ deduce executable"); }; label_it->update(0, ""); entry_box.entries.emplace_back(run_arguments, [this, project_path](const std::string& content){ @@ -868,6 +868,7 @@ void Window::set_menu_actions() { if(exit_status!=EXIT_SUCCESS) debugging=false; else { + debug_start_mutex.lock(); Debug::get().start(command, debug_build_path, breakpoints, [this, command](int exit_status){ debugging=false; Terminal::get().async_print(command+" returned: "+std::to_string(exit_status)+'\n'); @@ -885,6 +886,7 @@ void Window::set_menu_actions() { debug_update_stop(); //Remove debug stop source mark }); + debug_start_mutex.unlock(); } }); }); @@ -1069,7 +1071,9 @@ bool Window::on_delete_event(GdkEventAny *event) { } Terminal::get().kill_async_processes(); #ifdef JUCI_ENABLE_DEBUG + debug_start_mutex.lock(); Debug::get().delete_debug(); + debug_start_mutex.unlock(); #endif return false; } diff --git a/src/window.h b/src/window.h index 0174918..51f5215 100644 --- a/src/window.h +++ b/src/window.h @@ -38,6 +38,7 @@ private: std::atomic debugging; Gtk::Label debug_status_label; + std::mutex debug_start_mutex; std::pair > debug_stop; boost::filesystem::path debug_last_stop_file_path; std::mutex debug_stop_mutex;