From 937f85765c7821ed3acb0679d1f98d73a7a9d327 Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Thu, 18 Aug 2016 17:17:12 +0800 Subject: [PATCH] Ensure that LaunchedURLClassLoader works when thread is interrupted See gh-6683 --- .../loader/data/RandomAccessDataFile.java | 37 ++++++------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/data/RandomAccessDataFile.java b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/data/RandomAccessDataFile.java index 5ba87dcc85..6014e90fb0 100644 --- a/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/data/RandomAccessDataFile.java +++ b/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/data/RandomAccessDataFile.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2013 the original author or authors. + * Copyright 2012-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -244,17 +244,10 @@ public class RandomAccessDataFile implements RandomAccessData { } public RandomAccessFile acquire() throws IOException { - try { - this.available.acquire(); - RandomAccessFile file = this.files.poll(); - return (file == null - ? new RandomAccessFile(RandomAccessDataFile.this.file, "r") - : file); - } - catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - throw new IOException(ex); - } + this.available.acquireUninterruptibly(); + RandomAccessFile file = this.files.poll(); + return (file == null + ? new RandomAccessFile(RandomAccessDataFile.this.file, "r") : file); } public void release(RandomAccessFile file) { @@ -263,22 +256,16 @@ public class RandomAccessDataFile implements RandomAccessData { } public void close() throws IOException { + this.available.acquireUninterruptibly(this.size); try { - this.available.acquire(this.size); - try { - RandomAccessFile file = this.files.poll(); - while (file != null) { - file.close(); - file = this.files.poll(); - } - } - finally { - this.available.release(this.size); + RandomAccessFile file = this.files.poll(); + while (file != null) { + file.close(); + file = this.files.poll(); } } - catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - throw new IOException(ex); + finally { + this.available.release(this.size); } }