access class sun.nio.ch.DirectBuffer in priveledged action, attempt to avoid (IDEA-146944 Internal error trying to build a java 9 project )

(cherry picked from commit 68ce925)
This commit is contained in:
Maxim.Mossienko
2015-10-28 15:54:42 +01:00
parent 7c016ade89
commit 9527dfb05b
2 changed files with 8 additions and 7 deletions
@@ -54,21 +54,23 @@ public abstract class DirectBufferWrapper extends ByteBufferWrapper {
@Override
public void unmap() {
if (isDirty()) flush();
if (myBuffer != null) disposeDirectBuffer((DirectBuffer)myBuffer);
if (myBuffer != null) disposeDirectBuffer(myBuffer);
myBuffer = null;
}
static boolean disposeDirectBuffer(final DirectBuffer buffer) {
static boolean disposeDirectBuffer(final ByteBuffer buffer) {
return AccessController.doPrivileged(new PrivilegedAction<Object>() {
@Override
@Nullable
public Object run() {
try {
Cleaner cleaner = buffer.cleaner();
if (cleaner != null) cleaner.clean(); // Already cleaned otherwise
if (buffer instanceof DirectBuffer) {
Cleaner cleaner = ((DirectBuffer)buffer).cleaner();
if (cleaner != null) cleaner.clean(); // Already cleaned otherwise
}
return null;
}
catch (Exception e) {
catch (Throwable e) {
return buffer;
}
}
@@ -17,7 +17,6 @@ package com.intellij.util.io;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.util.TimeoutUtil;
import sun.nio.ch.DirectBuffer;
import java.io.File;
import java.io.IOException;
@@ -78,7 +77,7 @@ public abstract class MappedBufferWrapper extends ByteBufferWrapper {
return false;
}
return DirectBufferWrapper.disposeDirectBuffer((DirectBuffer)buffer);
return DirectBufferWrapper.disposeDirectBuffer(buffer);
}
private static boolean tryForce(MappedByteBuffer buffer) {