8210856: Move InstanceKlass DependencyContext cleaning to SystemDictionary::do_unloading()

Already walk classes in ClassLoaderData::unload so generalize to also clean nmethod dependencies.

Reviewed-by: eosterlund, dlong, vlivanov
This commit is contained in:
Coleen Phillimore 2018-09-26 14:01:48 -04:00
parent 9c60728a28
commit 06a1ea846a
6 changed files with 25 additions and 33 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -50,7 +50,7 @@ class TestDependencyContext {
}
~TestDependencyContext() {
dependencies().wipe();
wipe();
CodeCache_lock->unlock();
}
@ -63,6 +63,18 @@ class TestDependencyContext {
return ctx.find_stale_entries();
}
#endif
void wipe() {
DependencyContext ctx(&_dependency_context);
nmethodBucket* b = ctx.dependencies();
ctx.set_dependencies(NULL);
ctx.set_has_stale_entries(false);
while (b != NULL) {
nmethodBucket* next = b->next();
delete b;
b = next;
}
}
};
static void test_remove_dependent_nmethod(int id, bool delete_immediately) {