On Tue, 6 May 2025 11:23:32 GMT, Thomas Stuefe <stu...@openjdk.org> wrote:

>> Aleksey Shipilev has updated the pull request with a new target base due to 
>> a merge or a rebase. The incremental webrev excludes the unrelated changes 
>> brought in by the merge/rebase. The pull request contains six additional 
>> commits since the last revision:
>> 
>>  - Add bug ID
>>  - Merge branch 'master' into JDK-8352533-jspawnhelper-ioexceptions
>>  - Pull message into a field
>>  - Test cases
>>  - Merge branch 'master' into JDK-8352533-jspawnhelper-ioexceptions
>>  - Initial fix
>>    
>>    Good spawnhelper failure message
>>    
>>    Trying tests
>>    
>>    Print helper message on all IOExceptions
>>    
>>    Final
>
> src/java.base/unix/native/libjava/ProcessImpl_md.c line 346:
> 
>> 344:         if (ret != EINVAL)
>> 345:             detail = tmpbuf;
>> 346:     }
> 
> Pre-existing, possibly as follow-up: 
> 
> I wonder whether we can do more. I don't like how we either only print out 
> the errno string, or only print out the "Default" detail (I don't like the 
> "default" prefix since it's really useful context information about this 
> errno). 
> 
> For a problem on this side, we mostly pass in errno, then swallow the 
> "defaultdetail". E.g. for posix_spawn failure, we'd print e.g. "12:Out of 
> memory\nPossible reasons: ... " (or whatever localized string strerror 
> returns).
> 
> For errors that happen inside the jspawnhelper (see line 790ff where we pass 
> 0 for the errno), we print out "0:Bad code from spawn helper\nPossible 
> reasons: ... ", so we swallow the errno we got from the jspawnhelper.
> 
> Could we print out instead the default, then the errno string, then the 
> Possible reasons text? E.g.
> "posix_spawn failed (12:Out of memory)\nPossible reasons: ..."
> or
> "Bad code from spawn helper (12:Out of memory)\nPossible reasons: ..." 
> 
> There is an issue of errnum values from the far side possibly intersecting 
> with valid errno. Could be solved simply by assigning negative values to 
> ERR_MALLOC, ERR_PIPE and ERR_ARGS. I am not aware of any errno values being 
> negative. The errno printing would need to recognise these three values in 
> addition to errno values. We also could remove the +3 workaround in the test.
> 
> The only argument I see against is some vague form of backward compatibility, 
> in case people get confused about the new information, or that existing tools 
> parse this output.

Yeah, I dislike `defaultDetail` naming and the fact we swallow it. I see good 
reason to print it unconditionally. I think we can do this with just a little 
code massaging. See new commit. It prints the message like:


Recursively executing 'JspawnhelperProtocol simulateCrashInChild4'
posix_spawn:0
java.io.IOException: Cannot run program "pwd": Failed to exec spawn helper: 
pid: 1405770, exit code: 4, error: 0 (none) 
Possible reasons:
  - Spawn helper ran into JDK version mismatch
  - Spawn helper ran into unexpected internal error
  - Spawn helper was terminated by another process
Possible solutions:
  - Restart JVM, especially after in-place JDK updates
  - Check system logs for JDK-related errors
  - Re-install JDK to fix permission/versioning problems
  - Switch to legacy launch mechanism with 
-Djdk.lang.Process.launchMechanism=VFORK

        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1044)
        at java.base/java.lang.Runtime.exec(Runtime.java:605)
        at java.base/java.lang.Runtime.exec(Runtime.java:470)
        at JspawnhelperProtocol.parentCode(JspawnhelperProtocol.java:58)
        at JspawnhelperProtocol.main(JspawnhelperProtocol.java:232)

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24149#discussion_r2086480179

Reply via email to