Commit Graph

38 Commits

Author SHA1 Message Date
Vladimir Lagunov
a3fdce3eb8 JBR-9779 Refactor: extract common logic for getting nio path in FileInputStream, RandomAccessFile, and FileOutputStream 2025-12-22 13:04:05 +01:00
Vladimir Lagunov
79d925f6ae JBR-9531 Prevent unexpected recursive usage of java.io over nio wrappers
Shortly said, we don't need to handle recursive invocations of the `java.io` to nio adapters, while this recursion leads to problems.

# Problem

Since we're not allowed to modify public API of Java classes, an unreliable workaround `IoOverNio.PARENT_FOR_FILE_CHANNEL_IMPL` had been introduced. This trick lets us pass some object into a called function without adding a new function argument.

The trick backfired at the following code:

```java
// at java.base/java.io.IoOverNioFileSystem.initializeStreamUsingNio (simplified code)
IoOverNio.PARENT_FOR_FILE_CHANNEL_IMPL.set(owner);
return initializeStreamsUsingNio0(owner, nioFs, file, nioPath, optionsForChannel, channelCleanable);

// at java.base/java.io.IoOverNioFileSystem.initializeStreamsUsingNio0
channel = nioFs.provider().newFileChannel(nioPath, optionsForChannel);
```

The intention of setting `PARENT_FOR_FILE_CHANNEL_IMPL` is to path `owner` inside a constructor of `sun.nio.ch.FileChannelImpl` which may be called by `newFileChannel(nioPath, optionsForChannel)`.

The implementation of `newFileChannel` in IntelliJ triggered class loading. The classloader of IntelliJ triggered the call `java.nio.file.Files.readAllBytes`. The latter code also invoked the constructor of `FileChannelImpl`, and the constructor got from the thread-local variable the value for the field `parent`. That value was supposed to be passed to a different invocation of the constructor.

The observable result of this bug was a `NullPointerExceptions` from `java.io.FileOutputStream.close`. Hypothetically, this bug could also lead to closing file descriptors earlier as expected in other unpredictable places.

# Rejected approaches

* The cleanest solution could be passing specific function arguments through function arguments.

  However, we may neither create a new public function in the module `java.base`, nor add an argument to an existing one. Thus, we have to keep dealing with thread-local variables.
* To hold several values in the thread-local variable.

  In this case, the constructor of `FileChannelImpl` should somehow choose the right value from the list. The only possible way for filtering values is by the provided path. It doesn't look like a performant and reliable solution.

# Chosen solution

This commit disables recursive invocations of `java.io` from `java.nio` adapters.

The chosen solution is tied to specifics of IntelliJ. The reason for introducing java.io over java.nio adapter was to be able to access files from remote machines without rewriting old code. It is not expected that an implementation of `java.nio.file.spi.FileSystemProvider` accesses the file system using `java.io`. The only imaginable way to get a `java.io` call from `java.nio` is class loading. In case of IntelliJ, it's assumed that the class loader never accesses classes and jars from a remote machine.

(cherry picked from commit 4588d8ff4460496fff8e626945bbd8bd68056555)
2025-11-25 14:41:35 +00:00
Vladimir Lagunov
159ea3a415 JBR-8539 fix jdk/jfr/event/io/TestFileReadOnly.java: mimic errors in RandomAccessFile.write 2025-08-29 12:14:00 +04:00
Vladimir Lagunov
cd9cb3ad38 JBR-7700 Fix the case with deletion of locked file on Windows 2025-08-29 12:13:59 +04:00
Vladimir Lagunov
5ed20aa5d4 JBR-7700 Classes from package java.io. use java.nio.file inside
The option can be enabled/disabled by specifying `-Djbr.java.io.use.nio=true/false`
2025-08-29 12:13:44 +04:00
Maxim Kartashev
b728e1c1de JBR-7700 Route java.io file system operations via java.nio.file
Use -Djbr.java.io.use.nio=false to undo

(cherry picked from commit ef22b4cc55)
2025-08-29 11:46:52 +04:00
Erik Gahlin
93260d639e 8361640: JFR: RandomAccessFile::readLine emits events for each character
Reviewed-by: mgronlun, alanb
Backport-of: 9bef2d1610
2025-07-16 15:35:30 +00:00
Erik Gahlin
eb770a060a 8351594: JFR: Rate-limited sampling of Java events
Reviewed-by: mgronlun, alanb
2025-06-05 11:36:08 +00:00
Brian Burkhalter
81e43114ec 8344077: Remove security manager dependency in java.io
Reviewed-by: rriggs, alanb, naoto, lancea
2024-11-19 20:30:22 +00:00
Sean Mullan
db85090553 8338411: Implement JEP 486: Permanently Disable the Security Manager
Co-authored-by: Sean Mullan <mullan@openjdk.org>
Co-authored-by: Alan Bateman <alanb@openjdk.org>
Co-authored-by: Weijun Wang <weijun@openjdk.org>
Co-authored-by: Aleksei Efimov <aefimov@openjdk.org>
Co-authored-by: Brian Burkhalter <bpb@openjdk.org>
Co-authored-by: Daniel Fuchs <dfuchs@openjdk.org>
Co-authored-by: Harshitha Onkar <honkar@openjdk.org>
Co-authored-by: Joe Wang <joehw@openjdk.org>
Co-authored-by: Jorn Vernee <jvernee@openjdk.org>
Co-authored-by: Justin Lu <jlu@openjdk.org>
Co-authored-by: Kevin Walls <kevinw@openjdk.org>
Co-authored-by: Lance Andersen <lancea@openjdk.org>
Co-authored-by: Naoto Sato <naoto@openjdk.org>
Co-authored-by: Roger Riggs <rriggs@openjdk.org>
Co-authored-by: Brent Christian <bchristi@openjdk.org>
Co-authored-by: Stuart Marks <smarks@openjdk.org>
Co-authored-by: Ian Graves <igraves@openjdk.org>
Co-authored-by: Phil Race <prr@openjdk.org>
Co-authored-by: Erik Gahlin <egahlin@openjdk.org>
Co-authored-by: Jaikiran Pai <jpai@openjdk.org>
Reviewed-by: kevinw, aivanov, rriggs, lancea, coffeys, dfuchs, ihse, erikj, cjplummer, coleenp, naoto, mchung, prr, weijun, joehw, azvegint, psadhukhan, bchristi, sundar, attila
2024-11-12 17:16:15 +00:00
Brian Burkhalter
64e3a9ee91 8339574: Behavior of File.is{Directory,File,Hidden} is not documented with respect to symlinks
Reviewed-by: djelinski, alanb
2024-09-17 15:50:32 +00:00
Erik Gahlin
4a20691e9b 8331876: JFR: Move file read and write events to java.base
Reviewed-by: mgronlun, alanb
2024-05-30 13:32:57 +00:00
Alan Bateman
412e306d81 8329593: Drop adjustments to target parallelism when virtual threads do I/O on files opened for buffered I/O
Reviewed-by: bpb, jpai
2024-04-23 16:10:13 +00:00
Joe Darcy
fbd15b2087 8325189: Enable this-escape javac warning in java.base
Reviewed-by: alanb, erikj, naoto, smarks, ihse, joehw, lancea, weijun
2024-02-07 20:05:11 +00:00
Brian Burkhalter
4b1e367eda 8325152: Clarify specification of java.io.RandomAccessFile.setLength
Reviewed-by: alanb
2024-02-06 19:35:03 +00:00
Brian Burkhalter
2624324ac2 8219567: Name of first parameter of RandomAccessFile(String,String) is inconsistent
Reviewed-by: jlu, vtewari, rriggs, jpai
2023-08-24 18:18:16 +00:00
Pavel Rappo
f39fc0aa2d 8314738: Remove all occurrences of and support for @revised
Reviewed-by: mr
2023-08-22 13:02:53 +00:00
Brian Burkhalter
710453c676 8308016: Use snippets in java.io package
Reviewed-by: rriggs
2023-05-23 16:00:40 +00:00
Archie Cobbs
0198afca3a 8305748: Clarify reentrant behavior of close() in FileInputStream, FileOutputStream, and RandomAccessFile
Reviewed-by: alanb, bpb
2023-05-10 16:24:00 +00:00
Per Minborg
74e1a8bfa8 8300236: Use VarHandle access in Data(Input | Output)Stream classes
Reviewed-by: rriggs, alanb
2023-01-25 12:54:27 +00:00
Per Minborg
7938f8c32a 8298639: Perform I/O operations in bulk for RandomAccessFile
Co-authored-by: Sergey Tsypanov <stsypanov@openjdk.org>
Reviewed-by: alanb, bpb
2022-12-18 20:25:42 +00:00
Per Minborg
81f57d568f 8298567: Make field in RandomAccessFile final
Reviewed-by: rriggs, chegar
2022-12-12 17:06:34 +00:00
Alan Bateman
9583e3657e 8284161: Implementation of Virtual Threads (Preview)
Co-authored-by: Ron Pressler <rpressler@openjdk.org>
Co-authored-by: Alan Bateman <alanb@openjdk.org>
Co-authored-by: Erik Österlund <eosterlund@openjdk.org>
Co-authored-by: Andrew Haley <aph@openjdk.org>
Co-authored-by: Rickard Bäckman <rbackman@openjdk.org>
Co-authored-by: Markus Grönlund <mgronlun@openjdk.org>
Co-authored-by: Leonid Mesnik <lmesnik@openjdk.org>
Co-authored-by: Serguei Spitsyn <sspitsyn@openjdk.org>
Co-authored-by: Chris Plummer <cjplummer@openjdk.org>
Co-authored-by: Coleen Phillimore <coleenp@openjdk.org>
Co-authored-by: Robbin Ehn <rehn@openjdk.org>
Co-authored-by: Stefan Karlsson <stefank@openjdk.org>
Co-authored-by: Thomas Schatzl <tschatzl@openjdk.org>
Co-authored-by: Sergey Kuksenko <skuksenko@openjdk.org>
Reviewed-by: lancea, eosterlund, rehn, sspitsyn, stefank, tschatzl, dfuchs, lmesnik, dcubed, kevinw, amenkov, dlong, mchung, psandoz, bpb, coleenp, smarks, egahlin, mseledtsov, coffeys, darcy
2022-05-07 08:06:16 +00:00
Masanori Yano
9bf31652cb 8276164: RandomAccessFile#write method could throw IndexOutOfBoundsException that is not described in javadoc
Reviewed-by: alanb
2021-11-02 06:44:48 +00:00
Claes Redestad
30b0f820ce 8272626: Avoid C-style array declarations in java.*
Reviewed-by: dfuchs, alanb
2021-08-18 10:47:03 +00:00
Weijun Wang
6765f90250 8266459: Implement JEP 411: Deprecate the Security Manager for Removal
Co-authored-by: Sean Mullan <mullan@openjdk.org>
Co-authored-by: Lance Andersen <lancea@openjdk.org>
Co-authored-by: Weijun Wang <weijun@openjdk.org>
Reviewed-by: erikj, darcy, chegar, naoto, joehw, alanb, mchung, kcr, prr, lancea
2021-06-02 11:57:31 +00:00
Pavel Rappo
c5462bb95d 8255989: Remove explicitly unascribed authorship from Java source files
Reviewed-by: redestad, mr, mchung, iris, serb
2020-11-07 12:11:43 +00:00
Jonathan Gibbons
0aa3c92577 8255262: Remove use of legacy custom @spec tag
Reviewed-by: lancea, mr, iris, alanb, darcy, mchung
2020-10-22 19:42:01 +00:00
Brian Burkhalter
db3053dcd1 8067127: Tags cleanup
Reviewed-by: rriggs, dfuchs, lancea
2020-10-07 17:16:04 +00:00
Ivan Gerasimov
b0e1ee4b3b 8241727: Typos: empty lines in javadoc, inconsistent indents, etc. (core-libs only)
Reviewed-by: prappo
2020-03-28 21:07:55 -07:00
Julia Boes
b15b322cf3 8230648: Replace @exception tag with @throws in java.base
Minor coding style update of javadoc tag in any file in java.base

Reviewed-by: prappo, lancea
2019-09-20 11:07:52 +01:00
Mandy Chung
9ffe7e1205 8211122: Reduce the number of internal classes made accessible to jdk.unsupported
Reviewed-by: alanb, dfuchs, kvn
2018-11-06 10:01:16 -08:00
Claes Redestad
02a3be9920 8211859: Avoid initializing AtomicBoolean from RandomAccessFile
Reviewed-by: alanb
2018-10-09 14:30:06 +02:00
Roger Riggs
cfe9ad4608 8189330: Cleanup FileDescriptor implementation
Reviewed-by: bpb
2018-02-23 14:26:29 -05:00
Roger Riggs
f29e21abb1 8080225: FileInput/OutputStream/FileChannel cleanup should be improved
Reviewed-by: mchung, plevart, bpb
2017-12-01 16:40:08 -05:00
Brian Burkhalter
18cbe428c1 8189963: Remove version of FileChannelImpl::open without the 'direct' parameter
Remove old version of FileChannelImpl::open and update call sites

Reviewed-by: rriggs
2017-10-26 11:08:31 -07:00
Roger Riggs
5e55e5e2ee 8187631: Refactor FileDescriptor close implementation
Reviewed-by: bpb, alanb
2017-09-21 11:41:12 -04:00
Erik Joelsson
3789983e89 8187443: Forest Consolidation: Move files to unified layout
Reviewed-by: darcy, ihse
2017-09-12 19:03:39 +02:00