on both Linux and MacOS libattach utilizes UNIX signal (QUIT) to cause a target 
JVM (attachee) to create the socket file used as transport for subsequent jcmds 
(and other attach based interactions) and to listen upon that for such.

it should be noted that the default behavior for QUIT (if not blocked or 
caught) is to terminate the signalled process.

during the early lifetime of a JVM, its signal handlers are not yet installed, 
and thus any signal such as QUIT will cause the
default behavior to occur, in this case the JVM will be terminated.

this is why some tests are failing with "not alive"

the "fix" is similar in nature to that already implemented for linux (however 
using a different OS dependent mechanism to obtain the attachee JVM's signal 
masks: sysctl(2)).

the method "checkCatchesAndSendQuitTo" will now obtain the "attachee" JVM 
signal masks and only kill(QUIT) if the
current masks indicate that the JVM's signals are now being handled.

the behavior in the success case is now identical to the previous 
implementation, however should the target JVM not 
become "ready" (signal handlers installed) prior to the attach "timeout" 
occurring the attach operation will throw an
"AttachNotSupportedException" with a suitable error message.

see also: https://bugs.openjdk.org/browse/JDK-8350766

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

Commit messages:
 - JDK-8344671: jcheck whitespace 'nits'
 - JDK-8344671: added stdbool.h and amended exception msg
 - JDK-89344671: fixed some white space issues
 - JDK-8344671: added test to macos attach code to test for signal handler 
state prior to sending QUIT, this will obviate early JVM termination when not 
ready to attach

Changes: https://git.openjdk.org/jdk/pull/24085/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24085&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8344671
  Stats: 58 lines in 2 files changed: 45 ins; 0 del; 13 mod
  Patch: https://git.openjdk.org/jdk/pull/24085.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24085/head:pull/24085

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

Reply via email to