> `ServerUdsChannelHolder` is introduced to manage the life cycle of a 
> `ServerSocketChannel` created using Unix domain sockets (UDS) in a 
> thread-safe manner.
> 
> ### Testing
> 
> Changes can be tested as follows:
> 
> 
> make build-microbenchmark
> build/linux-x64/jdk/bin/java \
>   -jar build/linux-x64/images/test/micro/benchmarks.jar \
>   -f 1 -wi 1 -i 1 -t 2 \
>   "(SocketChannelConnectionSetup|UnixSocketChannelReadWrite)"
> 
> 
> ### Background
> 
> A UDS need to be pointed to a _non-existent_ file, which is to be created by 
> `bind()`. The created file needs to be deleted as a part of the clean-up at 
> exit. When tests employing UDS run in parallel, failures can happen at 
> multiple places:
> 
> - `bind()` can fail, if the file is already created by another thread
> - the clean-up of the socket file can fail, if the file is already deleted
>   - reported for `SocketChannelConnectionSetup` in 
> [8350915](https://bugs.openjdk.org/browse/JDK-8350915)
>   - reported for `UnixSocketChannelReadWrite` in 
> [8351601](https://bugs.openjdk.org/browse/JDK-8351601)
> - the clean-up of the socket file parent directory can fail, if not all 
> threads deleted their socket files, and hence, the folder is not empty
>   - reported for in `SocketChannelConnectionSetup` in 
> [8354024](https://bugs.openjdk.org/browse/JDK-8354024)
> 
> This PR introduces `ServerUdsChannelHolder` utility to manage the life cycle 
> of a UDS and avoids above shared issues by:
> - using a dedicated (temporary and unique) parent folder for the socket
> - encapsulating the termination logic (i.e., closing the socket, deleting the 
> socket file and its (dedicated) parent folder) in `AutoCloseable::close`

Volkan Yazici has updated the pull request incrementally with one additional 
commit since the last revision:

  Fix copyright year

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/24568/files
  - new: https://git.openjdk.org/jdk/pull/24568/files/19be0e7a..57e7ed7d

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=24568&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=24568&range=00-01

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/24568.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24568/head:pull/24568

PR: https://git.openjdk.org/jdk/pull/24568

Reply via email to