8222086: CodeCache::UnloadingScope needs to preserve and restore previous IsUnloadingBehavior
Reviewed-by: eosterlund
--- 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);