From 34aa56d42959b5af82dc9b9def2d36e1c629e7e2 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Tue, 11 Mar 2014 14:56:51 +0200 Subject: [PATCH] Fix deleting executing breakpoint --- src/core/debug.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/core/debug.cpp b/src/core/debug.cpp index 97064a64..c0626c52 100644 --- a/src/core/debug.cpp +++ b/src/core/debug.cpp @@ -150,8 +150,10 @@ void debug_fire_callback_read(uint64_t addr, uint64_t value) requesting_break = false; cb_list* cb1 = read_cb.count(debug_all_addr) ? &read_cb[debug_all_addr] : &dummy_cb; cb_list* cb2 = read_cb.count(addr) ? &read_cb[addr] : &dummy_cb; - for(auto& i : *cb1) i.cb(addr, value); - for(auto& i : *cb2) i.cb(addr, value); + auto _cb1 = *cb1; + auto _cb2 = *cb2; + for(auto& i : _cb1) i.cb(addr, value); + for(auto& i : _cb2) i.cb(addr, value); if(requesting_break) do_break_pause(); } @@ -161,8 +163,10 @@ void debug_fire_callback_write(uint64_t addr, uint64_t value) requesting_break = false; cb_list* cb1 = write_cb.count(debug_all_addr) ? &write_cb[debug_all_addr] : &dummy_cb; cb_list* cb2 = write_cb.count(addr) ? &write_cb[addr] : &dummy_cb; - for(auto& i : *cb1) i.cb(addr, value); - for(auto& i : *cb2) i.cb(addr, value); + auto _cb1 = *cb1; + auto _cb2 = *cb2; + for(auto& i : _cb1) i.cb(addr, value); + for(auto& i : _cb2) i.cb(addr, value); if(requesting_break) do_break_pause(); } @@ -172,9 +176,11 @@ void debug_fire_callback_exec(uint64_t addr, uint64_t value) requesting_break = false; cb_list* cb1 = exec_cb.count(debug_all_addr) ? &exec_cb[debug_all_addr] : &dummy_cb; cb_list* cb2 = exec_cb.count(addr) ? &exec_cb[addr] : &dummy_cb; + auto _cb1 = *cb1; + auto _cb2 = *cb2; if(value & xmask) - for(auto& i : *cb1) i.cb(addr, value); - for(auto& i : *cb2) i.cb(addr, value); + for(auto& i : _cb1) i.cb(addr, value); + for(auto& i : _cb2) i.cb(addr, value); if(requesting_break) do_break_pause(); } @@ -183,7 +189,8 @@ void debug_fire_callback_trace(uint64_t proc, const char* str, bool true_insn) { requesting_break = false; cb2_list* cb = trace_cb.count(proc) ? &trace_cb[proc] : &dummy_cb2; - for(auto& i : *cb) i.cb(proc, str, true_insn); + auto _cb = *cb; + for(auto& i : _cb) i.cb(proc, str, true_insn); if(requesting_break) do_break_pause(); }