Split part of delete_breakpoint into delete_breakpoint_at
diff --git a/breakpoints.c b/breakpoints.c
index 144735c..ebb22d6 100644
--- a/breakpoints.c
+++ b/breakpoints.c
@@ -321,27 +321,40 @@
}
void
-delete_breakpoint(struct process *proc, arch_addr_t addr)
+delete_breakpoint_at(struct process *proc, arch_addr_t addr)
{
- debug(DEBUG_FUNCTION, "delete_breakpoint(pid=%d, addr=%p)", proc->pid, addr);
+ debug(DEBUG_FUNCTION, "delete_breakpoint_at(pid=%d, addr=%p)",
+ proc->pid, addr);
struct process *leader = proc->leader;
assert(leader != NULL);
- struct breakpoint *sbp = NULL;
- DICT_FIND_VAL(leader->breakpoints, &addr, &sbp);
- assert(sbp != NULL);
+ struct breakpoint *bp = NULL;
+ DICT_FIND_VAL(leader->breakpoints, &addr, &bp);
+ assert(bp != NULL);
- if (breakpoint_turn_off(sbp, proc) < 0) {
+ if (delete_breakpoint(proc, bp) < 0) {
fprintf(stderr, "Couldn't turn off the breakpoint %s@%p\n",
- breakpoint_name(sbp), sbp->addr);
- return;
+ breakpoint_name(bp), bp->addr);
}
- if (sbp->enabled == 0) {
- proc_remove_breakpoint(leader, sbp);
- breakpoint_destroy(sbp);
- free(sbp);
+}
+
+int
+delete_breakpoint(struct process *proc, struct breakpoint *bp)
+{
+ struct process *leader = proc->leader;
+ assert(leader != NULL);
+
+ if (breakpoint_turn_off(bp, proc) < 0)
+ return -1;
+
+ if (bp->enabled == 0) {
+ proc_remove_breakpoint(leader, bp);
+ breakpoint_destroy(bp);
+ free(bp);
}
+
+ return 0;
}
const char *
@@ -403,7 +416,7 @@
{
if (proc == NULL || proc->leader == NULL)
return;
- delete_breakpoint(proc, bp->addr);
+ delete_breakpoint_at(proc, bp->addr);
process_hit_start(proc);
}