8222086: CodeCache::UnloadingScope needs to preserve and restore previous IsUnloadingBehavior
authorzgu
Mon, 08 Apr 2019 13:22:59 -0400
changeset 54461 ba0d64652b86
parent 54460 6733a9176cce
child 54462 2020eaa9ca9f
8222086: CodeCache::UnloadingScope needs to preserve and restore previous IsUnloadingBehavior Reviewed-by: eosterlund
src/hotspot/share/code/codeCache.cpp
src/hotspot/share/code/codeCache.hpp
--- a/src/hotspot/share/code/codeCache.cpp	Mon Apr 08 17:09:02 2019 +0000
+++ b/src/hotspot/share/code/codeCache.cpp	Mon Apr 08 13:22:59 2019 -0400
@@ -780,13 +780,14 @@
 CodeCache::UnloadingScope::UnloadingScope(BoolObjectClosure* is_alive)
   : _is_unloading_behaviour(is_alive)
 {
+  _saved_behaviour = IsUnloadingBehaviour::current();
   IsUnloadingBehaviour::set_current(&_is_unloading_behaviour);
   increment_unloading_cycle();
   DependencyContext::cleaning_start();
 }
 
 CodeCache::UnloadingScope::~UnloadingScope() {
-  IsUnloadingBehaviour::set_current(NULL);
+  IsUnloadingBehaviour::set_current(_saved_behaviour);
   DependencyContext::cleaning_end();
 }
 
--- a/src/hotspot/share/code/codeCache.hpp	Mon Apr 08 17:09:02 2019 +0000
+++ b/src/hotspot/share/code/codeCache.hpp	Mon Apr 08 13:22:59 2019 -0400
@@ -170,6 +170,7 @@
   // "unloading_occurred" controls whether metadata should be cleaned because of class unloading.
   class UnloadingScope: StackObj {
     ClosureIsUnloadingBehaviour _is_unloading_behaviour;
+    IsUnloadingBehaviour*       _saved_behaviour;
 
   public:
     UnloadingScope(BoolObjectClosure* is_alive);