2005-11-09 Andrew Stubbs * breakpoint.c (breakpoint_thread_match): Disable thread specific breakpoints if we hit one after the thread has ceased to exist. Index: src/gdb/breakpoint.c =================================================================== --- src.orig/gdb/breakpoint.c 2005-05-29 04:13:17.000000000 +0100 +++ src/gdb/breakpoint.c 2005-11-01 13:49:40.000000000 +0000 @@ -1797,9 +1797,23 @@ breakpoint_thread_match (CORE_ADDR pc, p if ((breakpoint_enabled (bpt->owner) || bpt->owner->enable_state == bp_permanent) - && bpt->address == pc - && (bpt->owner->thread == -1 || bpt->owner->thread == thread)) + && bpt->address == pc) { + /* Disable matched breakpoint if thread no longer exists: this + prevents other tasks from hitting the breakpoint and improves + performance. */ + if ((bpt->owner->thread != -1) && (bpt->owner->thread != thread)) + { + if (!target_thread_alive(thread_id_to_pid(bpt->owner->thread))) + { + printf_filtered ( + "Breakpoint %d disabled as thread %d no longer alive.\n", + bpt->owner->number, bpt->owner->thread); + disable_breakpoint(bpt->owner); + } + continue; /* no need to consider this breakpoint any further */ + } + if (overlay_debugging && section_is_overlay (bpt->section) && !section_is_mapped (bpt->section))