anjuta r3609 - in trunk: . plugins/debug-manager
- From: sgranjoux svn gnome org
- To: svn-commits-list gnome org
- Subject: anjuta r3609 - in trunk: . plugins/debug-manager
- Date: Fri, 8 Feb 2008 21:35:16 +0000 (GMT)
Author: sgranjoux
Date: Fri Feb 8 21:35:16 2008
New Revision: 3609
URL: http://svn.gnome.org/viewvc/anjuta?rev=3609&view=rev
Log:
* plugins/debug-manager/command.c,
plugins/debug-manager/command.h,
plugins/debug-manager/queue.c:
Fix crashes when trying to stop the debugger while it is busy
Modified:
trunk/ChangeLog
trunk/plugins/debug-manager/command.c
trunk/plugins/debug-manager/command.h
trunk/plugins/debug-manager/queue.c
Modified: trunk/plugins/debug-manager/command.c
==============================================================================
--- trunk/plugins/debug-manager/command.c (original)
+++ trunk/plugins/debug-manager/command.c Fri Feb 8 21:35:16 2008
@@ -118,7 +118,7 @@
NEED_DEBUGGER_STOPPED | NEED_DEBUGGER_STARTED,
DMA_QUIT_COMMAND =
QUIT_COMMAND | CANCEL_ALL_COMMAND | STOP_DEBUGGER |
- NEED_DEBUGGER_STARTED | NEED_PROGRAM_LOADED | NEED_PROGRAM_STOPPED,
+ HIGH_PRIORITY | NEED_DEBUGGER_STARTED | NEED_PROGRAM_LOADED | NEED_PROGRAM_STOPPED,
DMA_ABORT_COMMAND =
ABORT_COMMAND | CANCEL_ALL_COMMAND | STOP_DEBUGGER |
ASYNCHRONOUS | NEED_DEBUGGER_STARTED | NEED_PROGRAM_LOADED | NEED_PROGRAM_STOPPED | NEED_PROGRAM_RUNNING,
Modified: trunk/plugins/debug-manager/command.h
==============================================================================
--- trunk/plugins/debug-manager/command.h (original)
+++ trunk/plugins/debug-manager/command.h Fri Feb 8 21:35:16 2008
@@ -52,7 +52,8 @@
NEED_PROGRAM_RUNNING = RUN_PROGRAM << (STATE_TO_NEED - STATE_TO_CHANGE),
CANCEL_IF_PROGRAM_RUNNING = 1 << 21,
CANCEL_ALL_COMMAND = 1 << 22,
- ASYNCHRONOUS = 1 << 23
+ ASYNCHRONOUS = 1 << 23,
+ HIGH_PRIORITY = 1 << 24
} DmaCommandFlag;
/* Create a new command structure and append to command queue */
Modified: trunk/plugins/debug-manager/queue.c
==============================================================================
--- trunk/plugins/debug-manager/queue.c (original)
+++ trunk/plugins/debug-manager/queue.c Fri Feb 8 21:35:16 2008
@@ -470,9 +470,9 @@
{
IAnjutaDebuggerState state;
- if (self->prepend_command)
+ if (self->prepend_command || dma_command_has_flag (cmd, HIGH_PRIORITY))
{
- /* Prepend command use debugger state or current command state */
+ /* Prepend command and high priority command use debugger state or current command state */
if (self->last != NULL)
{
state = dma_command_is_going_to_state (self->last);
@@ -708,8 +708,11 @@
g_return_if_fail (self->last != NULL);
self->prepend_command++;
- dma_command_callback (self->last, data, err);
- self->prepend_command--;
+ if (self->queue_state != IANJUTA_DEBUGGER_STOPPED)
+ {
+ dma_command_callback (self->last, data, err);
+ }
+ self->prepend_command--;
}
gboolean
@@ -736,9 +739,29 @@
/* Append command at the beginning */
g_queue_push_head (self->queue, cmd);
- dma_debugger_queue_complete (self, self->debugger_state);
+ /* We must not interrupt command having callback, as the command
+ * will be removed, the callback when emitted will be redirected to
+ * the handler of the next command */
+ if ((state == IANJUTA_DEBUGGER_STOPPED) || (state == IANJUTA_DEBUGGER_PROGRAM_RUNNING))
+ {
+ dma_debugger_queue_complete (self, self->debugger_state);
+ }
+ }
+ else if ((self->prepend_command > 0) || dma_command_has_flag (cmd, HIGH_PRIORITY))
+ {
+ IAnjutaDebuggerState state;
+
+ state = dma_command_is_going_to_state (cmd);
+ if (state != IANJUTA_DEBUGGER_BUSY)
+ {
+ /* Command is changing debugger state */
+ dma_queue_cancel_unexpected (self, state);
+ }
+
+ /* Prepend command at the beginning */
+ g_queue_push_head (self->queue, cmd);
}
- else if (self->prepend_command == 0)
+ else
{
/* Append command at the end (in the queue) */
IAnjutaDebuggerState state;
@@ -751,11 +774,6 @@
self->queue_state = state;
}
}
- else
- {
- /* Prepend command at the beginning */
- g_queue_push_head (self->queue, cmd);
- }
dma_debugger_queue_execute(self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]