aboutsummaryrefslogtreecommitdiff
path: root/breakpoints.c
diff options
context:
space:
mode:
authorPetr Machata <pmachata@redhat.com>2012-04-19 17:00:53 +0200
committerPetr Machata <pmachata@redhat.com>2012-04-19 17:00:53 +0200
commitf7fee43f72667f453bba5aaeea6b5490ece6792a (patch)
treea4753481a80b5e5cefba34e1613df6a4922f3afc /breakpoints.c
parent77fbb8ff4ba461c11af3678a0db7cf6a47738ff4 (diff)
downloadltrace-f7fee43f72667f453bba5aaeea6b5490ece6792a.tar.gz
Implement proc_remove_breakpoint
Diffstat (limited to 'breakpoints.c')
-rw-r--r--breakpoints.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/breakpoints.c b/breakpoints.c
index 07430af..36f5e72 100644
--- a/breakpoints.c
+++ b/breakpoints.c
@@ -228,15 +228,13 @@ insert_breakpoint(struct Process *proc, void *addr,
void
delete_breakpoint(Process *proc, void *addr)
{
- struct breakpoint *sbp;
-
debug(DEBUG_FUNCTION, "delete_breakpoint(pid=%d, addr=%p)", proc->pid, addr);
Process * leader = proc->leader;
assert(leader != NULL);
- sbp = dict_find_entry(leader->breakpoints, addr);
- assert(sbp); /* FIXME: remove after debugging has been done. */
+ struct breakpoint *sbp = dict_find_entry(leader->breakpoints, addr);
+ assert(sbp != NULL);
/* This should only happen on out-of-memory conditions. */
if (sbp == NULL)
return;
@@ -246,6 +244,11 @@ delete_breakpoint(Process *proc, void *addr)
breakpoint_name(sbp), sbp->addr);
return;
}
+ if (sbp->enabled == 0) {
+ proc_remove_breakpoint(leader, sbp);
+ breakpoint_destroy(sbp);
+ free(sbp);
+ }
}
const char *