On Sat, 3 Sep 2022 09:47:05 GMT, Serguei Spitsyn <[email protected]> wrote:
> Also, I'm curious how did you verify that no regressions have been introduced?
Run all Redefine/Retransform Classes tests:
test/jdk/java/lang/instrument
test/hotspot/jtreg/serviceability/jvmti/RedefineClasses
test/hotspot/jtreg/vmTestbase/nsk/jvmti/RedefineClasses
test/hotspot/jtreg/vmTestbase/nsk/jvmti/RetransformClasses
> test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineRetransform/RedefineRetransform.java
> line 76:
>
>> 74: private static byte[] initialClassBytes;
>> 75:
>> 76: private static class VersionScanner extends ClassVisitor {
>
> This class needs some explanation.
> It is unclear how does it work.
> Could you, please, add relevant comments where needed?
> For instance, how are the class file bytes constructed and what role does the
> version play.
Done.
> test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineRetransform/RedefineRetransform.java
> line 236:
>
>> 234: redefine(2, 5); // updates cached class bytes
>> 235: retransform(3, 2);
>> 236: retransform(4, 2);
>
> The comments for all test cases need to be aligned.
> Also, it is better to comment all redefine/retransform cases.
Done.
> test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineRetransform/libRedefineRetransform.cpp
> line 179:
>
>> 177: if (err != JVMTI_ERROR_NONE) {
>> 178: _log("nRedefine: SetEventNotificationMode(JVMTI_DISABLE) error
>> %d\n", err);
>> 179: }
>
> It makes sense to introduce an utility function which does
> SetEventNotificationMode.
> It can be two separate functions to enable and disable or one single function
> can support both cases.
Removed code duplication - now the code is in helper class
> test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineRetransform/libRedefineRetransform.cpp
> line 195:
>
>> 193: _log("nRedefine: classLoadHookSavedClassBytes is NULL\n");
>> 194: return nullptr;
>> 195: }
>
> The checks 181-195 seems to be the same in functions nRedefine and
> nRetransform,
> so one utility function can be used in both cases.
Removed code duplication - now the code is in helper class
> test/hotspot/jtreg/serviceability/jvmti/RedefineClasses/RedefineRetransform/libRedefineRetransform.cpp
> line 274:
>
>> 272: classLoadHookSavedClassBytes = nullptr;
>> 273:
>> 274: return result;
>
> The fragments 197-214 and 256-274 do the same.
> I'd suggest to define and use a function that does this post-processing.
reworked the code a bit, moved all common code to helper class
-------------
PR: https://git.openjdk.org/jdk/pull/10032