apache / apache/maven-mvnd

Hang with SpotBugs plugin and fork=false

Open
#979 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
3.5k
Forks
250
Avg merge
16h 22m
Merged PRs (30d)
36

Description

A parallel build invoking spotbugs-maven-plugin without forking ends up hanging build sometimes. A thread dump shows two build tasks attempting to lock a monitor:

```
"BuilderThread 3" #52 [174264] prio=5 os_prio=0 cpu=4139,05ms elapsed=2286,53s tid=0x00007fd300a2ab80 nid=174264 waiting for monitor entry [0x00007fd4361fb000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.tools.ant.taskdefs.Redirector.complete(Redirector.java:971)
- waiting to lock <0x0000000433800000> (a java.lang.Object)
at org.apache.tools.ant.taskdefs.Java.run(Java.java:893)
at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:232)
at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:136)
at org.apache.tools.ant.taskdefs.Java.execute(Java.java:109)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)
at java.lang.invoke.LambdaForm$DMH/0x00007fd3e01fc000.invokeVirtual(java.base@21.0.2/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00007fd3e1498c00.invoke(java.base@21.0.2/LambdaForm$MH)
at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.2/Invokers$Holder)
at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.2/DirectMethodHandleAccessor.java:153)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.2/DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke(java.base@21.0.2/Method.java:580)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at groovy.ant.AntBuilder.performTask(AntBuilder.java:347)
at groovy.ant.AntBuilder.nodeCompleted(AntBuilder.java:286)
at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:161)
at groovy.ant.AntBuilder.doInvokeMethod(AntBuilder.java:219)
at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:75)
at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151)
```

and
```
"BuilderThread 11" #60 [174272] prio=5 os_prio=0 cpu=3370,14ms elapsed=2286,53s tid=0x00007fd300a3a340 nid=174272 waiting for monitor entry [0x00007fd4359fb000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.apache.tools.ant.taskdefs.Redirector.complete(Redirector.java:971)
- waiting to lock <0x0000000433828660> (a java.lang.Object)
at org.apache.tools.ant.taskdefs.Java.run(Java.java:893)
at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:232)
at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:136)
at org.apache.tools.ant.taskdefs.Java.execute(Java.java:109)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:299)
at java.lang.invoke.LambdaForm$DMH/0x00007fd3e01fc000.invokeVirtual(java.base@21.0.2/LambdaForm$DMH)
at java.lang.invoke.LambdaForm$MH/0x00007fd3e1498c00.invoke(java.base@21.0.2/LambdaForm$MH)
at java.lang.invoke.Invokers$Holder.invokeExact_MT(java.base@21.0.2/Invokers$Holder)
at jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(java.base@21.0.2/DirectMethodHandleAccessor.java:153)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke(java.base@21.0.2/DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke(java.base@21.0.2/Method.java:580)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
at groovy.ant.AntBuilder.performTask(AntBuilder.java:347)
at groovy.ant.AntBuilder.nodeCompleted(AntBuilder.java:286)
at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:161)
at groovy.ant.AntBuilder.doInvokeMethod(AntBuilder.java:219)
at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:75)
at org.codehaus.groovy.vmplugin.v8.IndyGuardsFiltersAndSignatures.invokeGroovyObjectInvoker(IndyGuardsFiltersAndSignatures.java:151)
```

both objects mentioned are held in this context:
```
"In pipe (disconnected)" #109 [174409] daemon prio=5 os_prio=0 cpu=0,25ms elapsed=2277,97s tid=0x00007fd1f00059f0 nid=174409 in Object.wait() [0x00007fd42bbfe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait0(java.base@21.0.2/Native Method)
- waiting on <0x00000007ff2284e0> (a java.util.LinkedList)
at java.lang.Object.wait(java.base@21.0.2/Object.java:366)
at java.lang.Object.wait(java.base@21.0.2/Object.java:339)
at org.mvndaemon.mvnd.daemon.Server$DaemonInputStream.read(Server.java:714)
- locked <0x00000007ff2284e0> (a java.util.LinkedList)
at java.io.InputStream.read(java.base@21.0.2/InputStream.java:287)
at java.io.FilterInputStream.read(java.base@21.0.2/FilterInputStream.java:119)
at org.apache.tools.ant.taskdefs.Redirector.handleInput(Redirector.java:868)
- locked <0x0000000433828660> (a java.lang.Object)
at org.apache.tools.ant.taskdefs.Java.handleInput(Java.java:809)
at org.apache.tools.ant.UnknownElement.handleInput(UnknownElement.java:240)
at org.apache.tools.ant.Project.demuxInput(Project.java:1327)
at org.apache.tools.ant.DemuxInputStream.read(DemuxInputStream.java:73)
at java.io.FilterInputStream.read(java.base@21.0.2/FilterInputStream.java:119)
at org.apache.tools.ant.taskdefs.Redirector.handleInput(Redirector.java:868)
- locked <0x0000000433800000> (a java.lang.Object)
at org.apache.tools.ant.taskdefs.Java.handleInput(Java.java:809)
at org.apache.tools.ant.UnknownElement.handleInput(UnknownElement.java:240)
at org.apache.tools.ant.Project.demuxInput(Project.java:1327)
at org.apache.tools.ant.DemuxInputStream.read(DemuxInputStream.java:73)
at java.io.InputStream.read(java.base@21.0.2/InputStream.java:220)
at org.ops4j.io.Pipe$Pump.run(Pipe.java:141)
```

This does not happen when SpotBugs is using forked mode, i.e. runs in a different JVM.

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce a parallel build with spotbugs-maven-plugin using fork=false and inspect the reported Ant Redirector/Java and mvnd Server$DaemonInputStream paths in a thread dump. Compare this with forked mode; done means the parallel non-forked build completes without hanging.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
build-system
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.