diff options
author | Petr Machata <pmachata@redhat.com> | 2012-04-19 17:00:53 +0200 |
---|---|---|
committer | Petr Machata <pmachata@redhat.com> | 2012-04-19 17:00:53 +0200 |
commit | f7fee43f72667f453bba5aaeea6b5490ece6792a (patch) | |
tree | a4753481a80b5e5cefba34e1613df6a4922f3afc /breakpoints.c | |
parent | 77fbb8ff4ba461c11af3678a0db7cf6a47738ff4 (diff) | |
download | ltrace-f7fee43f72667f453bba5aaeea6b5490ece6792a.tar.gz |
Implement proc_remove_breakpoint
Diffstat (limited to 'breakpoints.c')
-rw-r--r-- | breakpoints.c | 11 |
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 * |