Entry-exit stubs are independent of deoptimization
We were incorrectly marking the instrumentation system as having no
instrumentation_stubs_installed_ even if entry_exit_stubs are still
installed. This would happen when the last method that had been
deoptimized is undeoptimized.
Test: ./test/testrunner/testrunner.py --host --runtime-option=-Xplugin:libtracefast-trampolined.so
Test: ./test.py --host
Change-Id: Ib3267cea65cb9f86f737eb5eb8b933daf76119b5
diff --git a/runtime/instrumentation.cc b/runtime/instrumentation.cc
index 34e2711..d752805 100644
--- a/runtime/instrumentation.cc
+++ b/runtime/instrumentation.cc
@@ -926,7 +926,7 @@
}
// If there is no deoptimized method left, we can restore the stack of each thread.
- if (empty) {
+ if (empty && !entry_exit_stubs_installed_) {
MutexLock mu(self, *Locks::thread_list_lock_);
Runtime::Current()->GetThreadList()->ForEach(InstrumentationRestoreStack, this);
instrumentation_stubs_installed_ = false;