On Thu, 21 Aug 2025 01:31:12 GMT, David Holmes <dhol...@openjdk.org> wrote:
>> There are other `synchronized(this)` within Process, its cleaner to stay >> consistent and update them later in a separate PR. > > That would be an incompatible change as subclasses could no longer define > operations that are atomic with respect to the superclass methods that lock > `this`. Maybe there is a cleaner overall solution that doesn't require locking `this` at all... ? For example... just brainstorming, this is not fully baked and probably outside of the scope of this PR... * Use `AtomicReference.getAndUpdate()` to set `inputCharset`, `outputCharset`, and `errorCharset` and check for conflicting values * Use `StableValue` for creating `inputReader`, `outputWriter`, and `errorWriter` (using the chosen charset) * Make `closed` an `AtomicBoolean` and use `compareAndSwap()` to make `close()` idempotent * In `close()`, obtain `inputReader`, `outputWriter`, and `errorWriter` from their `StableValue`s and just forcibly close them. We may unnecessarily create a transient reader or writer(s) but so what. I think it's worthwhile to minimize locking in `Process` because it's more likely than most classes to be accessed by multiple threads at once. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/26649#discussion_r2289728694