diff options
Diffstat (limited to 'luni/src/main')
-rw-r--r-- | luni/src/main/java/java/nio/FileChannelImpl.java | 8 | ||||
-rw-r--r-- | luni/src/main/native/libcore_io_Posix.cpp | 3 |
2 files changed, 8 insertions, 3 deletions
diff --git a/luni/src/main/java/java/nio/FileChannelImpl.java b/luni/src/main/java/java/nio/FileChannelImpl.java index 4ed7dba..d72b9f0 100644 --- a/luni/src/main/java/java/nio/FileChannelImpl.java +++ b/luni/src/main/java/java/nio/FileChannelImpl.java @@ -23,9 +23,11 @@ import android.util.MutableLong; import java.io.Closeable; import java.io.FileDescriptor; import java.io.IOException; +import java.nio.channels.ClosedByInterruptException; import java.nio.channels.ClosedChannelException; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; +import java.nio.channels.FileLockInterruptionException; import java.nio.channels.NonReadableChannelException; import java.nio.channels.NonWritableChannelException; import java.nio.channels.OverlappingFileLockException; @@ -164,7 +166,11 @@ final class FileChannelImpl extends FileChannel { resultLock = basicLock(position, size, shared, true); completed = true; } finally { - end(completed); + try { + end(completed); + } catch (ClosedByInterruptException e) { + throw new FileLockInterruptionException(); + } } } return resultLock; diff --git a/luni/src/main/native/libcore_io_Posix.cpp b/luni/src/main/native/libcore_io_Posix.cpp index 2721758..c04f73e 100644 --- a/luni/src/main/native/libcore_io_Posix.cpp +++ b/luni/src/main/native/libcore_io_Posix.cpp @@ -594,8 +594,7 @@ static jint Posix_fcntlFlock(JNIEnv* env, jobject, jobject javaFd, jint cmd, job lock.l_len = env->GetLongField(javaFlock, lenFid); lock.l_pid = env->GetIntField(javaFlock, pidFid); - int fd = jniGetFDFromFileDescriptor(env, javaFd); - int rc = throwIfMinusOne(env, "fcntl", TEMP_FAILURE_RETRY(fcntl(fd, cmd, &lock))); + int rc = IO_FAILURE_RETRY(env, int, fcntl, javaFd, cmd, &lock); if (rc != -1) { env->SetShortField(javaFlock, typeFid, lock.l_type); env->SetShortField(javaFlock, whenceFid, lock.l_whence); |