/**
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.soloader;
import java.io.FileOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.channels.FileLock;
import java.io.Closeable;
public final class FileLocker implements Closeable {
private final FileOutputStream mLockFileOutputStream;
private final FileLock mLock;
public static FileLocker lock(File lockFile) throws IOException {
return new FileLocker(lockFile);
}
private FileLocker(File lockFile) throws IOException {
mLockFileOutputStream = new FileOutputStream(lockFile);
FileLock lock = null;
try {
lock = mLockFileOutputStream.getChannel().lock();
} finally {
if (lock == null) {
mLockFileOutputStream.close();
}
}
mLock = lock;
}
@Override
public void close() throws IOException {
try {
mLock.release();
} finally {
mLockFileOutputStream.close();
}
}
}