[ https://issues.apache.org/jira/browse/SUREFIRE-1302?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Yuriy updated SUREFIRE-1302: ---------------------------- Description: This issue happens because surefire kills the forked container if it times out waiting for the 'ping'. In org.apache.maven.surefire.booter.ForkedBooter class there is hardcoded constant PING_TIMEOUT_IN_SECONDS = 20 which is used in the following method: {code} private static ScheduledFuture<?> listenToShutdownCommands( CommandReader reader ) { reader.addShutdownListener( createExitHandler( reader ) ); AtomicBoolean pingDone = new AtomicBoolean( true ); reader.addNoopListener( createPingHandler( pingDone ) ); return JVM_TERMINATOR.scheduleAtFixedRate( createPingJob( pingDone, reader ), 0,PING_TIMEOUT_IN_SECONDS, SECONDS ); } {code} to create ScheduledFuture. In some of the cases the forked container might respond a bit later than it's expected and surefire kills it {code} private static Runnable createPingJob( final AtomicBoolean pingDone, final CommandReader reader ) { return new Runnable() { public void run() { boolean hasPing = pingDone.getAndSet( false ); if ( !hasPing ) { exit( 1, KILL, reader, true ); } } }; } {code} As long as we need to terminate it anyway, It would be really helpful if the problem could be solved making the PING_TIMEOUT_IN_SECONDS configurable with the ability to specify the value from maven-surefire-plugin. It would help to configure this timeout based on needs and factors of the projects where surefire runs. was: This issue happens because surefire kills the forked container if it times out waiting for the 'ping'. In org.apache.maven.surefire.booter.ForkedBooter class there is hardcoded constant PING_TIMEOUT_IN_SECONDS = 20 which is used in the following method: private static ScheduledFuture<?> listenToShutdownCommands( CommandReader reader ) { reader.addShutdownListener( createExitHandler( reader ) ); AtomicBoolean pingDone = new AtomicBoolean( true ); reader.addNoopListener( createPingHandler( pingDone ) ); return JVM_TERMINATOR.scheduleAtFixedRate( createPingJob( pingDone, reader ), 0,PING_TIMEOUT_IN_SECONDS, SECONDS ); } to create ScheduledFuture. In some of the cases the forked container might respond a bit later than it's expected and surefire kills it private static Runnable createPingJob( final AtomicBoolean pingDone, final CommandReader reader ) { return new Runnable() { public void run() { boolean hasPing = pingDone.getAndSet( false ); if ( !hasPing ) { exit( 1, KILL, reader, true ); } } }; } As long as we need to terminate it anyway, It would be really helpful if the problem could be solved making the PING_TIMEOUT_IN_SECONDS configurable with the ability to specify the value from maven-surefire-plugin. It would help to configure this timeout based on needs and factors of the projects where surefire runs. > The forked VM terminated without properly saying goodbye. VM crash or > System.exit called? > ----------------------------------------------------------------------------------------- > > Key: SUREFIRE-1302 > URL: https://issues.apache.org/jira/browse/SUREFIRE-1302 > Project: Maven Surefire > Issue Type: Bug > Components: Maven Surefire Plugin > Affects Versions: 2.19.1 > Reporter: Yuriy > > This issue happens because surefire kills the forked container if it times > out waiting for the 'ping'. > In org.apache.maven.surefire.booter.ForkedBooter class there is hardcoded > constant PING_TIMEOUT_IN_SECONDS = 20 which is used in the following method: > {code} > private static ScheduledFuture<?> listenToShutdownCommands( CommandReader > reader ) > { > reader.addShutdownListener( createExitHandler( reader ) ); > AtomicBoolean pingDone = new AtomicBoolean( true ); > reader.addNoopListener( createPingHandler( pingDone ) ); > return JVM_TERMINATOR.scheduleAtFixedRate( createPingJob( pingDone, > reader ), > 0,PING_TIMEOUT_IN_SECONDS, > SECONDS ); > } > {code} > to create ScheduledFuture. > In some of the cases the forked container might respond a bit later than it's > expected and surefire kills it > {code} > private static Runnable createPingJob( final AtomicBoolean pingDone, final > CommandReader reader ) > { > return new Runnable() > { > public void run() > { > boolean hasPing = pingDone.getAndSet( false ); > if ( !hasPing ) > { > exit( 1, KILL, reader, true ); > } > } > }; > } > {code} > As long as we need to terminate it anyway, It would be really helpful if the > problem could be solved making the PING_TIMEOUT_IN_SECONDS configurable with > the ability to specify the value from maven-surefire-plugin. > It would help to configure this timeout based on needs and factors of the > projects where surefire runs. -- This message was sent by Atlassian JIRA (v6.3.4#6332)