Created
February 4, 2025 14:45
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @Test | |
| fun closeAJarFileWhileSomebodyIsReadingIt() { | |
| val someJarResource = this::class.java.classLoader.getResource("LICENSE-junit.txt")!! | |
| val connectionA = someJarResource.openConnection() | |
| val sourceA = connectionA.getInputStream().source().buffer() | |
| val connectionB = someJarResource.openConnection() | |
| val sourceB = connectionB.getInputStream().source().buffer() | |
| connectionA.useCaches = false | |
| assertThat(sourceA.readUtf8()).contains("JUnit") | |
| sourceA.close() | |
| assertThat(sourceB.readUtf8()).contains("JUnit") | |
| sourceB.close() | |
| } |
It doesn’t crash if you remove this line:
connectionA.useCaches = falseAnd it doesn’t crash if you don’t open sourceB until after closing sourceA.
Setting useCaches to false causes sourceA to close a .jar file that it doesn’t own.
awesome! explains the race condition
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This crashes on line 15: