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

Reply via email to