On 4/15/13 4:48 PM, David Holmes wrote:
On 16/04/2013 3:59 AM, serguei.spit...@oracle.com wrote:
Hi David,
Thank you for the comments!
On 4/14/13 10:12 PM, David Holmes wrote:
Hi Serguei,
Not a full review ...
In instanceKlass.cpp:
+ MemberNameTable* mnt = member_names();
+ if (mnt != NULL) {
+ delete mnt;
+ }
a) do we need to call set_member_names(null) ?
Fixed, thanks.
b) do we need to use the MemberNameTable_lock to guard this?
I don't think so.
This deallocation must be done at a safepoint.
We can't grab locks at safepoints.
Okay but that is only one side of things. We also have to verify that
any code that does grab the lock can't enter a safepoint while holding
the lock.
Thank you for checking this.
I did a check that the code that grabs the lock does not need a safepoint.
I can place a No_Safepoint_Verifier, if you think, it makes sense to do.
Currently, this is the only place that grabs the lock:
void InstanceKlass::add_member_name(Handle mem_name) {
jweak mem_name_wref = JNIHandles::make_weak_global(mem_name);
MutexLocker ml(MemberNameTable_lock);
DEBUG_ONLY(No_Safepoint_Verifier nsv); // <= We can add this check
if (_member_names == NULL) {
_member_names = new (ResourceObj::C_HEAP, mtClass) MemberNameTable();
}
_member_names->add_member_name(mem_name_wref);
}
Thanks,
Serguei
David
------