diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-11-26 20:12:28 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-11-26 20:12:28 +0000 |
commit | 6f5a9f7e56ab8dfeacca9ac779c0661261642873 (patch) | |
tree | 629e55857ec303e52c2032a8d02f3d6c4e03e524 /exec.c | |
parent | 4a38940da0c0376ed29252757f3b2fa26944cd47 (diff) |
fixed async signal support for tb_phys_invalidate()
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1670 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'exec.c')
-rw-r--r-- | exec.c | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -672,12 +672,19 @@ void tb_invalidate_phys_page_range(target_ulong start, target_ulong end, #endif } #endif /* TARGET_HAS_PRECISE_SMC */ - saved_tb = env->current_tb; - env->current_tb = NULL; + /* we need to do that to handle the case where a signal + occurs while doing tb_phys_invalidate() */ + saved_tb = NULL; + if (env) { + saved_tb = env->current_tb; + env->current_tb = NULL; + } tb_phys_invalidate(tb, -1); - env->current_tb = saved_tb; - if (env->interrupt_request && env->current_tb) - cpu_interrupt(env, env->interrupt_request); + if (env) { + env->current_tb = saved_tb; + if (env->interrupt_request && env->current_tb) + cpu_interrupt(env, env->interrupt_request); + } } tb = tb_next; } |