mirror of https://github.com/sbt/sbt.git
Remove unnecessary read-lock
The corresponding files are atomically moved at their places once fully downloaded, no need for locks here.
This commit is contained in:
parent
ff20ab3623
commit
2ac4e83391
|
|
@ -483,42 +483,26 @@ object Cache {
|
||||||
FileError.ChecksumFormatError(sumType, sumFile).left
|
FileError.ChecksumFormatError(sumType, sumFile).left
|
||||||
|
|
||||||
case Some(sum) =>
|
case Some(sum) =>
|
||||||
val f = new File(artifact0.url)
|
|
||||||
val md = MessageDigest.getInstance(sumType)
|
val md = MessageDigest.getInstance(sumType)
|
||||||
|
|
||||||
|
val f = new File(artifact0.url)
|
||||||
val is = new FileInputStream(f)
|
val is = new FileInputStream(f)
|
||||||
val res = try {
|
try withContent(is, md.update(_, 0, _))
|
||||||
var lock: FileLock = null
|
finally is.close()
|
||||||
try {
|
|
||||||
lock = is.getChannel.tryLock(0L, Long.MaxValue, true)
|
|
||||||
if (lock == null)
|
|
||||||
FileError.Locked(f).left
|
|
||||||
else {
|
|
||||||
withContent(is, md.update(_, 0, _))
|
|
||||||
().right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
case e: OverlappingFileLockException =>
|
|
||||||
FileError.Locked(f).left
|
|
||||||
}
|
|
||||||
finally if (lock != null) lock.release()
|
|
||||||
} finally is.close()
|
|
||||||
|
|
||||||
res.flatMap { _ =>
|
val digest = md.digest()
|
||||||
val digest = md.digest()
|
val calculatedSum = new BigInteger(1, digest)
|
||||||
val calculatedSum = new BigInteger(1, digest)
|
|
||||||
|
|
||||||
if (sum == calculatedSum)
|
if (sum == calculatedSum)
|
||||||
().right
|
().right
|
||||||
else
|
else
|
||||||
FileError.WrongChecksum(
|
FileError.WrongChecksum(
|
||||||
sumType,
|
sumType,
|
||||||
calculatedSum.toString(16),
|
calculatedSum.toString(16),
|
||||||
sum.toString(16),
|
sum.toString(16),
|
||||||
artifact0.url,
|
artifact0.url,
|
||||||
sumFile
|
sumFile
|
||||||
).left
|
).left
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue