The code in attachListener.cpp does this: DCmd::parse_and_execute(DCmd_Source_AttachAPI, out, op->arg(0), ' ', THREAD); if (HAS_PENDING_EXCEPTION) { java_lang_Throwable::print(PENDING_EXCEPTION, out); out->cr(); CLEAR_PENDING_EXCEPTION; // The exception has been printed on the output stream // If the JVM returns JNI_ERR, the attachAPI throws a generic I/O // exception and the content of the output stream is not processed. // By returning JNI_OK, the exception will be displayed on the client side } return JNI_OK;
That was correct before the fix of JDK-8039173. After that fix, the attach framework is able to propagate error messages as exceptions when an attach command fails. The code in attachListener.cpp should be updated to: DCmd::parse_and_execute(DCmd_Source_AttachAPI, out, op->arg(0), ' ', THREAD); if (HAS_PENDING_EXCEPTION) { java_lang_Throwable::print(PENDING_EXCEPTION, out); out->cr(); CLEAR_PENDING_EXCEPTION; return JNI_ERR; } return JNI_OK; webrev: http://cr.openjdk.java.net/~sla/8044398/webrev.00/ bug: https://bugs.openjdk.java.net/browse/JDK-8044398 Thanks, /Staffan