aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/ada-tasks.c13
2 files changed, 18 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0310fcc..f44b021 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -2,6 +2,11 @@
* linux-record.c (record_linux_msghdr): Remove unintended semicolons.
+2010-03-16 Joel Brobecker <brobecker@adacore.com>
+
+ * ada-tasks.c (task_command_1): Check that the task ptid is valid
+ before doing the associated thread switch.
+
2010-03-16 Daniel Jacobowitz <dan@codesourcery.com>
* MAINTAINERS: Update my email address.
diff --git a/gdb/ada-tasks.c b/gdb/ada-tasks.c
index be9b8e6..519cfc6 100644
--- a/gdb/ada-tasks.c
+++ b/gdb/ada-tasks.c
@@ -877,6 +877,19 @@ task_command_1 (char *taskno_str, int from_tty)
to the thread list. */
target_find_new_threads ();
+ /* Verify that the ptid of the task we want to switch to is valid
+ (in other words, a ptid that GDB knows about). Otherwise, we will
+ cause an assertion failure later on, when we try to determine
+ the ptid associated thread_info data. We should normally never
+ encounter such an error, but the wrong ptid can actually easily be
+ computed if target_get_ada_task_ptid has not been implemented for
+ our target (yet). Rather than cause an assertion error in that case,
+ it's nicer for the user to just refuse to perform the task switch. */
+ if (!find_thread_ptid (task_info->ptid))
+ error (_("Unable to compute thread ID for task %d.\n"
+ "Cannot switch to this task."),
+ taskno);
+
switch_to_thread (task_info->ptid);
ada_find_printable_frame (get_selected_frame (NULL));
printf_filtered (_("[Switching to task %d]\n"), taskno);