Yasumasa, jvmtiExport.cpp:
I'm reluctant to change printing drastically at this stage of jdk9. So it might be better to refactor the code to keep only one line in output and print either st->print_cr("return code: %d", result); or st->print_cr("%s was not loaded because of %s", ebuf); Pending exception situation is less clean for me. We continue to load agent ever if an exception happens. I would recommend to leave the code as is and address this issue separately. diagnosticCommand.cpp: No comments HotSpotVirtualMachine.java: 68 Agent_OnAttach failed: " + result We know that result is null here. 71 We don't need to use regex here. The only case where agent is loaded correctly returns exactly "return code: 0" so we can check for presence of this string to return OK and throw an exception with a message read from agent in all other case. -Dmitry On 2016-09-08 14:28, Yasumasa Suenaga wrote: > Hi David, > >> This one is tricky to get indentation reasonable but at the moment it >> seems inconsistent maybe something like: > > Thanks! > I will fix it after discussion on [1]. > > >> You know result is null here. >> >> 74 int retCode = Integer.parseInt(matcher.group(1)); >> >> This can throw NumberFormatException which is not declared for this >> method. The original code wraps this in an IOException. > > > My patch uses regex, and checks the match before getting the value: > ----------------- > + Matcher matcher = Pattern.compile("^return code: (\\d+)$") > + .matcher(result); > + if (matcher.matches()) { > + int retCode = Integer.parseInt(matcher.group(1)); > + if (retCode != 0) { > + throw new AgentInitializationException( > + "Agent_OnAttach failed", > retCode); > + } > + } > ----------------- > > So I think matcher.group(1) will not return null. > > > Thanks, > > Yasumasa > > > [1] > http://mail.openjdk.java.net/pipermail/serviceability-dev/2016-September/020385.html > > > > On 2016/09/08 19:18, David Holmes wrote: >> On 8/09/2016 1:47 PM, Yasumasa Suenaga wrote: >>> Hi all, >>> >>> This changes has been approved. But it was not passed JPRT. >>> It is caused by checking return value in >>> HotSpotVirtualMachine#loadAgentLibrary(). >>> >>> I've fixed it and uploaded webrev. This changes has been passed JPRT. >>> (Thanks David!) >>> Could you review again? >>> >>> hotspot: >>> http://cr.openjdk.java.net/~ysuenaga/JDK-8164913/webrev.02/hotspot/ >> >> Looks ok. >> >>> jdk: >>> http://cr.openjdk.java.net/~ysuenaga/JDK-8164913/webrev.02/jdk/ >> >> src/jdk.attach/share/classes/sun/tools/attach/HotSpotVirtualMachine.java >> >> 63 try(BufferedReader reader = new BufferedReader(new >> InputStreamReader( >> 64 execute("load", agentLibrary, >> 65 >> Boolean.toString(isAbsolute), options)))) { >> >> This one is tricky to get indentation reasonable but at the moment it >> seems inconsistent maybe something like: >> >> try (BufferedReader reader = >> new BufferedReader( >> new InputStreamReader( >> execute("load", >> agentLibrary, >> >> Boolean.toString(isAbsolute), options) >> ))) { >> >> I can't get the above to display correctly in my mail client but >> hopefully you get the idea. Also note space after 'try'. >> >> 67 if (result == null) { >> 68 throw new AgentInitializationException( >> 69 "Agent_OnAttach failed: " + >> result); >> >> You know result is null here. >> >> 74 int retCode = Integer.parseInt(matcher.group(1)); >> >> This can throw NumberFormatException which is not declared for this >> method. The original code wraps this in an IOException. >> >> Thanks, >> David >> >>> >>> Thanks, >>> >>> Yasumasa >>> >>> >>> On 2016/09/07 16:47, serguei.spit...@oracle.com wrote: >>>> On 9/7/16 00:45, Dmitry Samersoff wrote: >>>>> Serguei, >>>>> >>>>> I'm OK with the fix and OK to be listed as a reviewer. >>>> >>>> Thanks, Dmitry! >>>> Serguei >>>>> >>>>> -Dmitry >>>>> >>>>> On 2016-09-07 07:08, serguei.spit...@oracle.com wrote: >>>>>> Hi Dmitry, >>>>>> >>>>>> As a sponsor I'm going to push this fix if you are Ok with the fix. >>>>>> Please, let me know if you still have any concerns. >>>>>> Also, confirm if you are Ok to be in the list of reviewers. >>>>>> >>>>>> >>>>>> On 9/5/16 06:46, Dmitry Samersoff wrote: >>>>>>> Yasumasa, >>>>>>> >>>>>>> I'll look closely to the fix. >>>>>>> >>>>>>> Please, notice: >>>>>>> >>>>>>> 1. We typically avoid printing attach error messages on >>>>>>> the target VM side. >>>>>> Some message was already printed: >>>>>> >>>>>> 2410 // Agent_OnAttach executed so completion status is JNI_OK >>>>>> 2411 st->print_cr("%d", result); >>>>>> 2412 result = JNI_OK; >>>>>> >>>>>> It is just a replacement. :) >>>>>> >>>>>> >>>>>>> 2. We are in RDP1 for jdk9. >>>>>>> >>>>>>> >>>>>>> http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-August/004777.html >>>>>>> >>>>>>> >>>>>> I've set the priority to P3, so it can be pushed to the jdk9/hs. >>>>>> >>>>>> Thanks, >>>>>> Serguei >>>>>> >>>>>>> -Dmitry >>>>>>> >>>>>>> On 2016-09-05 16:25, Yasumasa Suenaga wrote: >>>>>>>> PING: Could you review and sponsor it? >>>>>>>> >>>>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8164913/webrev.01/ >>>>>>>> Thanks, >>>>>>>> >>>>>>>> Yasumasa >>>>>>>> >>>>>>>> >>>>>>>> On 2016/09/01 12:47, Yasumasa Suenaga wrote: >>>>>>>>> Hi all, >>>>>>>>> >>>>>>>>> I think RDP1 has been started. >>>>>>>>> Cannot I fix this? >>>>>>>>> >>>>>>>>> This problem is that jcmd shows incorrect status when JVMTI agent >>>>>>>>> cannot be attached. >>>>>>>>> I think this problem should be fixed in 9 GA. >>>>>>>>> The users who want.to <http://want.to> attach JVMTI agent want to >>>>>>>>> know >>>>>>>>> whether it succeed. >>>>>>>>> >>>>>>>>> Yasumasa >>>>>>>>> >>>>>>>>> >>>>>>>>> 2016/08/29 15:42 "Yasumasa Suenaga" <yasue...@gmail.com >>>>>>>>> <mailto:yasue...@gmail.com>>: >>>>>>>>> >>>>>>>>> This comment no longer matches the code and should be >>>>>>>>> deleted: >>>>>>>>> >>>>>>>>> 2412 // Agent_OnAttach executed so completion >>>>>>>>> status is >>>>>>>>> JNI_OK >>>>>>>>> 2413 st->print_cr("return code: %d", result); >>>>>>>>> >>>>>>>>> >>>>>>>>> Thanks David! >>>>>>>>> I removed it in new webrev. >>>>>>>>> >>>>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8164913/webrev.01/ >>>>>>>>> <http://cr.openjdk.java.net/~ysuenaga/JDK-8164913/webrev.01/> >>>>>>>>> >>>>>>>>> >>>>>>>>> Yasumasa >>>>>>>>> >>>>>>>>> >>>>>>>>> On 2016/08/29 12:59, David Holmes wrote: >>>>>>>>> >>>>>>>>> Hi Yasumasa, >>>>>>>>> >>>>>>>>> On 28/08/2016 10:47 PM, Yasumasa Suenaga wrote: >>>>>>>>> >>>>>>>>> Hi all, >>>>>>>>> >>>>>>>>> If we try to attach invalid JVMTI agent via >>>>>>>>> JVMTI.agent_load dcmd, we >>>>>>>>> will get >>>>>>>>> "Command executed successfully". However, it implies >>>>>>>>> error in >>>>>>>>> JVMTIAgentLoadDCmd. >>>>>>>>> >>>>>>>>> This message is from JCmd.java when jcmd does not >>>>>>>>> receive >>>>>>>>> output from >>>>>>>>> target VM. >>>>>>>>> So we should send error message from >>>>>>>>> JVMTIAgentLoadDCmd. >>>>>>>>> >>>>>>>>> I uploaded a webrev for it. Could you review it? >>>>>>>>> >>>>>>>>> >>>>>>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8164913/webrev.00/ >>>>>>>>> <http://cr.openjdk.java.net/~ysuenaga/JDK-8164913/webrev.00/> >>>>>>>>> >>>>>>>>> >>>>>>>>> This seems reasonable. >>>>>>>>> >>>>>>>>> src/share/vm/prims/jvmtiExport.cpp >>>>>>>>> >>>>>>>>> This comment no longer matches the code and should be >>>>>>>>> deleted: >>>>>>>>> >>>>>>>>> 2412 // Agent_OnAttach executed so completion >>>>>>>>> status is >>>>>>>>> JNI_OK >>>>>>>>> 2413 st->print_cr("return code: %d", result); >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> David >>>>>>>>> >>>>>>>>> I cannot access JPRT. >>>>>>>>> So I need a sponsor. >>>>>>>>> >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> Yasumasa >>>>>>>>> >>>>> >>>> -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.