Serguei, http://cr.openjdk.java.net/~dsamersoff/JDK-8059038/webrev.05
Webrev updated in-place (press shift-reload). Code changes at ll.119. Added more comments to other places. -Dmitry On 2015-06-27 03:15, serguei.spit...@oracle.com wrote: > Hi Dmitry, > > Thank you for the update! > The SALauncher.java changes are really nice. > I have just couple of small comments. > > agent/src/share/classes/sun/jvm/hotspot/SALauncher.java > > 343 // Run tmtools > 344 if (args[0].equals("jstack")) { > 345 runJSTACK(oldArgs); > > Why the comment says "Run tmtools", not jstack? > BTW, other fragments have no such a comment which is Ok at it is obvious. > > > agent/src/share/classes/sun/jvm/hotspot/SAGetopt.java > > There are no checks of the carg length in several places where it is needed: > > 61 if (_argv[_optind].charAt(0) == '-') { > > 112 if (carg.charAt(0) != '-' || carg.equals("--")) { > 117 if (carg.charAt(0) == '-' && carg.charAt(1) == '-') { > 124 carg = carg.substring(2); > > 136 ch = carg.charAt(_optopt); > 139 ch = carg.charAt(_optopt); > > > Otherwise, the fix looks good. > > > Thanks, > Serguei > > > On 6/24/15 5:37 AM, Dmitry Samersoff wrote: >> Serguei, >> >> Thank you for the review. >> >> New webrev is here: >> >> http://cr.openjdk.java.net/~dsamersoff/JDK-8059038/webrev.05/ >> >> I didn't change naming convention in SAGetoptTest.java and keep a_opt, >> b_opt etc as it gives better readability. Other concerns are addressed. >> >> BasicLauncherTest changed to use LingeredApp from testlib. >> >> -Dmitry >> >> >> On 2015-06-24 08:32, serguei.spit...@oracle.com wrote: >>> Hi Dmitry, >>> >>> Some quick minor comments. >>> >>> hotspot_webrev/agent/src/share/classes/sun/jvm/hotspot/SAGetopt.java >>> >>> Formatting is wrong: >>> >>> 57 if (_optind >_argv.length) { >>> >>> 71 String[] ca = carg.split("=",2); >>> >>> 80 if (los.contains(ca[0]+"=")) { >>> >>> >>> Need to use camel case for java method names: >>> >>> 55 private void extract_optarg(String opt) { >>> >>> 69 private String process_long_options(String carg, String[] >>> longOptStr) { >>> >>> >>> Need to use quotes for '-': >>> >>> 109 // End of option batch like -abc reached, expect option to >>> start from - >>> >>> Example is: >>> >>> 133 // At this point carg[0] contains '-' >>> >>> >>> Wrong indent at 87, 139, 120-121: >>> >>> 85 else { >>> 86 // Mixed style options --file name >>> 87 extract_optarg(ca[0]); >>> 88 } >>> >>> 138 else { >>> 139 ch = carg.charAt(_optopt); >>> 140 } >>> >>> 119 if (longOptStr == null || longOptStr.length == 0) { >>> 120 // No long options specified, stop options >>> processing >>> 121 return null; >>> 122 } >>> >>> >>> >>> hotspot_webrev/agent/src/share/classes/sun/jvm/hotspot/SALauncher.java >>> >>> Uninitialized local: >>> >>> 128 String s; >>> >>> Need to use camel case: >>> >>> 126 String exe_or_pid = null; >>> >>> >>> The main method is too long, I'd suggest to split with the sub-methods for: >>> clhsdb, hsdb, jstack, jmap, jinfo >>> >>> >>> jdk_webrev/test/sun/tools/jhsdb/BasicLauncherTest.java >>> >>> Wrong indent at 82, 85: >>> >>> 80 return toolProcess.exitValue(); >>> 81 } finally { >>> 82 theApp.stopApp(); >>> 83 } >>> 84 } catch (IOException | InterruptedException ex) { >>> 85 throw new RuntimeException("Test ERROR " + ex, ex); >>> 86 } >>> >>> >>> I do not understand what is the need for nested try statements, just one >>> try would be enough: >>> >>> 54 System.out.println("Starting LingeredApp"); >>> 55 try { >>> 56 try { >>> . . . >>> 81 } finally { >>> 82 theApp.stopApp(); >>> 83 } >>> 84 } catch (IOException | InterruptedException ex) { >>> 85 throw new RuntimeException("Test ERROR " + ex, ex); >>> 86 } >>> >>> 98 try { >>> 99 try { >>> . . . >>> 116 } finally { >>> 117 theApp.stopApp(); >>> 118 } >>> 119 } catch (Exception ex) { >>> 120 throw new RuntimeException("Test ERROR " + ex, ex); >>> 121 } >>> >>> >>> Why do you catch exceptions and throw the RuntimeException's in the >>> launch() methods >>> but catch the IOException in main? Would it be better to catch any >>> Exception? >>> >>> Too many empty lines: >>> >>> 88 >>> 89 >>> 90 >>> >>> >>> jdk_webrev/test/sun/tools/jhsdb/LingeredApp.java >>> >>> Too many empty lines: >>> >>> 275 >>> 276 >>> >>> 369 >>> >>> >>> jdk_webrev/test/sun/tools/jhsdb/SAGetoptTest.java >>> >>> Need to use Java naming convention: >>> >>> 36 private static boolean a_opt; >>> 37 private static boolean b_opt; >>> 38 private static boolean c_opt; >>> 39 private static boolean e_opt; >>> 40 private static boolean mixed_opt; >>> 41 >>> 42 private static String d_value; >>> 43 private static String exe_value; >>> 44 private static String core_value; >>> >>> Wrong indent 2 instead of 4: >>> >>> 70 if (s.equals("a")) { >>> 71 a_opt = true; >>> 72 continue; >>> 73 } >>> 74 >>> 75 if (s.equals("b")) { >>> 76 b_opt = true; >>> 77 continue; >>> 78 } >>> 79 >>> 80 if (s.equals("c")) { >>> 81 c_opt = true; >>> 82 continue; >>> 83 } >>> 84 >>> 85 if (s.equals("e")) { >>> 86 e_opt = true; >>> 87 continue; >>> 88 } >>> 89 >>> 90 if (s.equals("mixed")) { >>> 91 mixed_opt = true; >>> 92 continue; >>> 93 } >>> >>> >>> Thanks, >>> Serguei >>> >>> >>> On 6/23/15 7:06 AM, Dmitry Samersoff wrote: >>>> Hi Everybody, >>>> >>>> Please review the changes: >>>> >>>> http://cr.openjdk.java.net/~dsamersoff/JDK-8059038/webrev.04/ >>>> >>>> I'm about to file CCC request for it but would like to get internal >>>> feedback before that. >>>> >>>> This fix is introducing native launcher jhsdb for serviceability agent. >>>> >>>> jhsdb >>>> >>>> will launch command line debugger clhsdb >>>> >>>> jhsdb jstack file core >>>> jhsdb jmap file core >>>> jhsdb jinfo file core >>>> >>>> will launch corresponding SA based utility. >>>> >>>> >>>> -Dmitry >>>> >>>> >> > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.