fixed async signal support for tb_phys_invalidate()

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1670 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2005-11-26 20:12:28 +00:00
parent 4a38940da0
commit 6f5a9f7e56

17
exec.c
View File

@ -672,12 +672,19 @@ void tb_invalidate_phys_page_range(target_ulong start, target_ulong end,
#endif #endif
} }
#endif /* TARGET_HAS_PRECISE_SMC */ #endif /* TARGET_HAS_PRECISE_SMC */
saved_tb = env->current_tb; /* we need to do that to handle the case where a signal
env->current_tb = NULL; 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); tb_phys_invalidate(tb, -1);
env->current_tb = saved_tb; if (env) {
if (env->interrupt_request && env->current_tb) env->current_tb = saved_tb;
cpu_interrupt(env, env->interrupt_request); if (env->interrupt_request && env->current_tb)
cpu_interrupt(env, env->interrupt_request);
}
} }
tb = tb_next; tb = tb_next;
} }