aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei <bunneidev@gmail.com>2015-04-30 19:46:50 -0400
committerGravatar bunnei <bunneidev@gmail.com>2015-05-01 18:35:51 -0400
commitbc41de2131728192e3fd4c8c83e8b2d6e5ba4530 (patch)
tree03a92c76eb03070dd6748f1b1dbb13efb68d4af0 /src
parentad4445c5298760d07039f2293466fe6e60e39006 (diff)
Qt: Fixed a bug in shutdown procedure, various cleanups.
Diffstat (limited to 'src')
-rw-r--r--src/citra_qt/bootmanager.cpp6
-rw-r--r--src/citra_qt/bootmanager.h8
-rw-r--r--src/citra_qt/debugger/disassembler.cpp4
-rw-r--r--src/citra_qt/debugger/disassembler.h4
-rw-r--r--src/citra_qt/debugger/registers.cpp4
-rw-r--r--src/citra_qt/debugger/registers.h4
-rw-r--r--src/citra_qt/main.cpp31
7 files changed, 26 insertions, 35 deletions
diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp
index 4be410fe..66a9e6fb 100644
--- a/src/citra_qt/bootmanager.cpp
+++ b/src/citra_qt/bootmanager.cpp
@@ -48,7 +48,7 @@ void EmuThread::run() {
Core::RunLoop();
was_active = running || exec_step;
- if (!was_active)
+ if (!was_active && !stop_run)
emit DebugModeEntered();
} else if (exec_step) {
if (!was_active)
@@ -273,10 +273,10 @@ void GRenderWindow::OnMinimalClientAreaChangeRequest(const std::pair<unsigned,un
setMinimumSize(minimal_size.first, minimal_size.second);
}
-void GRenderWindow::OnEmulationStarted(EmuThread* emu_thread) {
+void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) {
this->emu_thread = emu_thread;
}
-void GRenderWindow::OnEmulationStopped() {
+void GRenderWindow::OnEmulationStopping() {
emu_thread = nullptr;
}
diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h
index e5752218..715faf2d 100644
--- a/src/citra_qt/bootmanager.h
+++ b/src/citra_qt/bootmanager.h
@@ -51,9 +51,9 @@ public:
bool IsRunning() { return running; }
/**
- * Requests for the emulation thread to stop running and shutdown emulation
+ * Requests for the emulation thread to stop running
*/
- void RequestShutdown() {
+ void RequestStop() {
stop_run = true;
running = false;
};
@@ -115,8 +115,8 @@ public:
public slots:
void moveContext(); // overridden
- void OnEmulationStarted(EmuThread* emu_thread);
- void OnEmulationStopped();
+ void OnEmulationStarting(EmuThread* emu_thread);
+ void OnEmulationStopping();
private:
void OnMinimalClientAreaChangeRequest(const std::pair<unsigned,unsigned>& minimal_size) override;
diff --git a/src/citra_qt/debugger/disassembler.cpp b/src/citra_qt/debugger/disassembler.cpp
index 6400bb85..08c6b49b 100644
--- a/src/citra_qt/debugger/disassembler.cpp
+++ b/src/citra_qt/debugger/disassembler.cpp
@@ -241,7 +241,7 @@ int DisassemblerWidget::SelectedRow() {
return disasm_ui.treeView->selectionModel()->currentIndex().row();
}
-void DisassemblerWidget::OnEmulationStarted(EmuThread* emu_thread) {
+void DisassemblerWidget::OnEmulationStarting(EmuThread* emu_thread) {
this->emu_thread = emu_thread;
model = new DisassemblerModel(this);
@@ -256,7 +256,7 @@ void DisassemblerWidget::OnEmulationStarted(EmuThread* emu_thread) {
setEnabled(true);
}
-void DisassemblerWidget::OnEmulationStopped() {
+void DisassemblerWidget::OnEmulationStopping() {
disasm_ui.treeView->setModel(nullptr);
delete model;
emu_thread = nullptr;
diff --git a/src/citra_qt/debugger/disassembler.h b/src/citra_qt/debugger/disassembler.h
index b771e95b..45b0a7e0 100644
--- a/src/citra_qt/debugger/disassembler.h
+++ b/src/citra_qt/debugger/disassembler.h
@@ -65,8 +65,8 @@ public slots:
void OnDebugModeEntered();
void OnDebugModeLeft();
- void OnEmulationStarted(EmuThread* emu_thread);
- void OnEmulationStopped();
+ void OnEmulationStarting(EmuThread* emu_thread);
+ void OnEmulationStopping();
private:
// returns -1 if no row is selected
diff --git a/src/citra_qt/debugger/registers.cpp b/src/citra_qt/debugger/registers.cpp
index 2b1e8ceb..5527a2af 100644
--- a/src/citra_qt/debugger/registers.cpp
+++ b/src/citra_qt/debugger/registers.cpp
@@ -71,11 +71,11 @@ void RegistersWidget::OnDebugModeEntered() {
void RegistersWidget::OnDebugModeLeft() {
}
-void RegistersWidget::OnEmulationStarted(EmuThread* emu_thread) {
+void RegistersWidget::OnEmulationStarting(EmuThread* emu_thread) {
setEnabled(true);
}
-void RegistersWidget::OnEmulationStopped() {
+void RegistersWidget::OnEmulationStopping() {
// Reset widget text
for (int i = 0; i < 16; ++i)
registers->child(i)->setText(1, QString(""));
diff --git a/src/citra_qt/debugger/registers.h b/src/citra_qt/debugger/registers.h
index 0356de29..68e3fb90 100644
--- a/src/citra_qt/debugger/registers.h
+++ b/src/citra_qt/debugger/registers.h
@@ -21,8 +21,8 @@ public slots:
void OnDebugModeEntered();
void OnDebugModeLeft();
- void OnEmulationStarted(EmuThread* emu_thread);
- void OnEmulationStopped();
+ void OnEmulationStarting(EmuThread* emu_thread);
+ void OnEmulationStopping();
private:
Ui::ARMRegisters cpu_regs_ui;
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index f21c55db..c3e63779 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -139,12 +139,12 @@ GMainWindow::GMainWindow() : emu_thread(nullptr)
connect(ui.action_Single_Window_Mode, SIGNAL(triggered(bool)), this, SLOT(ToggleWindowMode()));
connect(ui.action_Hotkeys, SIGNAL(triggered()), this, SLOT(OnOpenHotkeysDialog()));
- connect(this, SIGNAL(EmulationStarted(EmuThread*)), disasmWidget, SLOT(OnEmulationStarted(EmuThread*)));
- connect(this, SIGNAL(EmulationStopped()), disasmWidget, SLOT(OnEmulationStopped()));
- connect(this, SIGNAL(EmulationStarted(EmuThread*)), registersWidget, SLOT(OnEmulationStarted(EmuThread*)));
- connect(this, SIGNAL(EmulationStopped()), registersWidget, SLOT(OnEmulationStopped()));
- connect(this, SIGNAL(EmulationStarted(EmuThread*)), render_window, SLOT(OnEmulationStarted(EmuThread*)));
- connect(this, SIGNAL(EmulationStopped()), render_window, SLOT(OnEmulationStopped()));
+ connect(this, SIGNAL(EmulationStarting(EmuThread*)), disasmWidget, SLOT(OnEmulationStarting(EmuThread*)));
+ connect(this, SIGNAL(EmulationStopping()), disasmWidget, SLOT(OnEmulationStopping()));
+ connect(this, SIGNAL(EmulationStarting(EmuThread*)), registersWidget, SLOT(OnEmulationStarting(EmuThread*)));
+ connect(this, SIGNAL(EmulationStopping()), registersWidget, SLOT(OnEmulationStopping()));
+ connect(this, SIGNAL(EmulationStarting(EmuThread*)), render_window, SLOT(OnEmulationStarting(EmuThread*)));
+ connect(this, SIGNAL(EmulationStopping()), render_window, SLOT(OnEmulationStopping()));
// Setup hotkeys
RegisterHotkey("Main Window", "Load File", QKeySequence::Open);
@@ -210,7 +210,7 @@ void GMainWindow::BootGame(std::string filename) {
// Create and start the emulation thread
emu_thread = Common::make_unique<EmuThread>(render_window);
- emit EmulationStarted(emu_thread.get());
+ emit EmulationStarting(emu_thread.get());
emu_thread->start();
// BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views before the CPU continues
@@ -230,25 +230,16 @@ void GMainWindow::BootGame(std::string filename) {
}
void GMainWindow::ShutdownGame() {
- // Shutdown the emulation thread
- emu_thread->RequestShutdown();
-
- // Disconnect signals that are attached to the current emulation thread
- disconnect(emu_thread.get(), SIGNAL(DebugModeEntered()), disasmWidget, SLOT(OnDebugModeEntered()));
- disconnect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, SLOT(OnDebugModeEntered()));
- disconnect(emu_thread.get(), SIGNAL(DebugModeEntered()), callstackWidget, SLOT(OnDebugModeEntered()));
- disconnect(emu_thread.get(), SIGNAL(DebugModeLeft()), disasmWidget, SLOT(OnDebugModeLeft()));
- disconnect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft()));
- disconnect(emu_thread.get(), SIGNAL(DebugModeLeft()), callstackWidget, SLOT(OnDebugModeLeft()));
+ emu_thread->RequestStop();
// Release emu threads from any breakpoints
- // This belongs after RequestShutdown() and before wait() because if emulation stops on a GPU
- // breakpoint after (or before) RequestShutdown() is called, the emulation would never be able
+ // This belongs after RequestStop() and before wait() because if emulation stops on a GPU
+ // breakpoint after (or before) RequestStop() is called, the emulation would never be able
// to continue out to the main loop and terminate. Thus wait() would hang forever.
// TODO(bunnei): This function is not thread safe, but it's being used as if it were
Pica::g_debug_context->ClearBreakpoints();
- emit EmulationStopped();
+ emit EmulationStopping();
// Wait for emulation thread to complete and delete it
emu_thread->wait();