Fixes leaks I could identify on `Agent_OnAttach` failure paths. In `libinstrument`: - the changes to `Agent_OnAttach` are the important ones, while `DEF_Agent_OnLoad` and `loadAgent` are updated for hygiene and uniformity (when they fail the process gets killed anyway) - besides implementing a proper cleanup (the "Improve failure cleanup in libinstrument" commit), I also reordered a few agent initialization steps to not create the JVM TI environment and change the classpath before the provided JAR is validated (the "Reorder blocks to minimize unrecoverable changes" commit)
The HotSpot change is adding a destructor to `JvmtiAgent` for the `delete` in `JvmtiAgentList::load_agent` executed when `Agent_OnAttach` fails. Tested by running `jdk_instrument`, `svc_tools`, `vmTestbase_nsk_aod`, `hotspot/vmTestbase/nsk/jvmti/AttachOnDemand`, `hotspot/serviceability/jvmti/RedefineClasse`. --------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - Fix JvmtiAgent's strings leak - Reorder blocks to minimize unrecoverable changes - Improve failure cleanup in libinstrument Changes: https://git.openjdk.org/jdk/pull/33608/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=33608&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8396046 Stats: 508 lines in 5 files changed: 204 ins; 177 del; 127 mod Patch: https://git.openjdk.org/jdk/pull/33608.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/33608/head:pull/33608 PR: https://git.openjdk.org/jdk/pull/33608
