On Tue, 23 Feb 2021 02:55:01 GMT, Chris Plummer <[email protected]> wrote:
>> Hi, Please review
>>
>> When debugging for other test case which uses jcmd to attach LingeredApp
>> process, found there is no error information logged when the app started
>> with function 'startAppExactJvmOpts' exits due to some reason. This is not
>> convenient for trace what is the app failure.
>> This simple fix for adding finishApp to print out error information when
>> LingeredApp could not start with startAppExactJvmOpts, this is similar to
>> startApp.
>>
>> Tests: This is a simple fix and done tests with test/jdk/sun/tools/jinfo
>> which uses the function startAppExactJvmOpts to create LingeredApp, also the
>> test case in debugging, which indeed captured the error message upon start
>> error.
>>
>> Thanks
>> Yumin
>
> test/lib/jdk/test/lib/apps/LingeredApp.java line 419:
>
>> 417: theApp.waitAppReady();
>> 418: } catch (Exception ex) {
>> 419: theApp.finishApp();
>
> I'm worried about the output appearing twice in some tests:
>
> try {
> ...
> theApp = new LingeredAppWithLargeArray();
> LingeredApp.startAppExactJvmOpts(theApp, vmArgs);
> attachAndDump(heapDumpFileName, theApp.getPid());
> } finally {
> LingeredApp.stopApp(theApp);
> heapDumpFile.delete();
> }
>
> So we always call `stopApp()`:
>
> public void stopApp() throws IOException {
> ...
> if (appProcess != null) {
> ...
> finishApp();
> ...
> }
> }
>
>
> Which means we always call `finishApp()`, which means we always print the
> output. With your changes won't we see the output twice when there is an
> exception?
>
> In the CR it looks like `LingeredApp.startAppExactJvmOpts()` is being call
> from `JCmdTest.java`. I don't see this test. Is it under development? Does it
> need a `stopApp()` call?
It seems error prone to have to call finishApp() manually in order to see the
error log. Since LingeredApp.startApp calls finishApp() on exceptions,
shouldn't startAppExactJvmOpts do the same thing?
-------------
PR: https://git.openjdk.java.net/jdk/pull/2679