re PR libgcj/12013 (Calling Reference.clear() can cause runtime to crash.)
2003-08-21 David Daney <ddaney@avtrex.com> Fix for PR libgcj/12013: * java/lang/ref/natReference.cc (finalize_referred_to_object): Check `cleared' field. * java/lang/ref/Reference.java (copy): Updated comments. (cleared): New field. (clear): Rewrote. From-SVN: r70668
This commit is contained in:
parent
aa779cf369
commit
c9a61d5aa7
3 changed files with 25 additions and 9 deletions
|
@ -1,5 +1,5 @@
|
|||
/* java.lang.ref.Reference
|
||||
Copyright (C) 1999, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1999, 2002, 2003 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
|
@ -83,14 +83,24 @@ public abstract class Reference
|
|||
|
||||
/**
|
||||
* This is like REFERENT but is not scanned by the GC. We keep a
|
||||
* copy around so that we can see when clear() has been called.
|
||||
* copy around so that we can clean up our internal data structure
|
||||
* even after clear() is called.
|
||||
* GCJ LOCAL:
|
||||
* This field doesn't exist in Classpath; we use it to detect
|
||||
* clearing.
|
||||
* This field doesn't exist in Classpath.
|
||||
* END GCJ LOCAL
|
||||
*/
|
||||
gnu.gcj.RawData copy;
|
||||
|
||||
/**
|
||||
* Set to true if {@link #clear()} is called.
|
||||
* GCJ LOCAL:
|
||||
* This field doesn't exist in Classpath. It is used internally in
|
||||
* natReference.cc, which enqueues the reference unless it is true
|
||||
* (has been cleared).
|
||||
* END GCJ LOCAL
|
||||
*/
|
||||
boolean cleared = false;
|
||||
|
||||
/**
|
||||
* The queue this reference is registered on. This is null, if this
|
||||
* wasn't registered to any queue or reference was already enqueued.
|
||||
|
@ -166,8 +176,7 @@ public abstract class Reference
|
|||
*/
|
||||
public void clear()
|
||||
{
|
||||
referent = null;
|
||||
copy = null;
|
||||
cleared = true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue