[9] RFR 8166253: (ch) FileLock object can get GC'd and result in unexpected release of file lock
Alan Bateman
Alan.Bateman at oracle.com
Tue Jan 30 08:58:30 UTC 2018
On 30/01/2018 01:23, Brian Burkhalter wrote:
> This is a continuation of the discussion about [1] which trailed off
> with [2].
>
> According to [3]:
>
> "A file-lock object is initially valid. It remains valid until the
> lock is released by invoking the release method, by closing the
> channel that was used to acquire it, or by the termination of the Java
> virtual machine, whichever comes first."
>
> The problem described in the issue occurs when a FileLock is obtained
> and subsequently becomes unreachable and is collected before the
> underlying native lock has been released (either explicitly or by
> closing the channel). In this case an attempt to obtain an overlapping
> lock should still be rejected in order to satisfy the foregoing
> specification, namely “[…] or by the termination of the Java virtual
> machine.”
>
> The proposed fix is:
>
> http://cr.openjdk.java.net/~bpb/8166253/webrev.03/
> <http://cr.openjdk.java.net/%7Ebpb/8166253/webrev.03/>
>
I think it would be simpler if FileChannel maintained a set of the valid
locks obtained via the channel, the the unlock can remove the lock from
the set.
While in the area then I think we can drop SimpleFileLockTable - that
was for 1.4/1.5 era compatibility (enabled via the
sun.nio.ch.disableSystemWideOverlappingFileLockCheck system property)
and I can't imagine anything dependent on this broken behavior in 2018.
-Alan
More information about the nio-dev
mailing list