maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andreas Gudian (JIRA)" <j...@codehaus.org>
Subject [jira] (SUREFIRE-946) Maven hangs on SIGTERM when using Surefire forking (CommandLineUtils.ProcessHook)
Date Wed, 09 Jan 2013 19:10:13 GMT

    [ https://jira.codehaus.org/browse/SUREFIRE-946?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=317047#comment-317047
] 

Andreas Gudian commented on SUREFIRE-946:
-----------------------------------------

@Kristian:
* indeed, {{closed}} needs to be volatile. Then it should be thread-safe again.
* {{BOOTERCODE_CRASH}} is the way for the forked process to let the main process know that
it terminated unexpectedly. The reason why I added this is to repair the crash-detection,
which would not work without actively closing the TestProvidingInputStream at some point.
See the extended CrashDetectionIT: it fails without that part of the fix (well, to be more
precise: the test will hang). However, as I have mentioned in one of my comments above, this
only fixes the crash detection for those cases where the VM is still able to execute the shutdown
hook successfully. To really fix it for that case as well, I yet have not any other idea than
to implement the heart-beat feature. Hmm, or perhaps if we extend the CommandLineUtils to
allow passing a custom hook to execute before it starts waiting on the streams. That could
work, I guess and I could remove the BOOTERCODE_CRASH stuff again... I'll try that... :)
* Integration-Tests: yeah. For the VM termination in the forked process, I extended the CrashDetectionIT.
To test the brutal VM crash of the forked process, I will further extend it (and call Runtime#halt).
The exact issue that Jesse had was that the main process tried to shut down, but the locks
held in the TestProvidingInputStream prevented the shutdown hooks to finish. So what we would
need is a test that sends a kill signal to the main process started by the IT. I don't know
the internal guts of the Verifier - but is that possible? Ok, looked at Process#destroy()
and it seems do-able. Requires some more work on CommandLineUtils, Verifier and everything
in between. Sounds like fun :)
                
> Maven hangs on SIGTERM when using Surefire forking (CommandLineUtils.ProcessHook)
> ---------------------------------------------------------------------------------
>
>                 Key: SUREFIRE-946
>                 URL: https://jira.codehaus.org/browse/SUREFIRE-946
>             Project: Maven Surefire
>          Issue Type: Bug
>    Affects Versions: 2.13
>            Reporter: Jesse Glick
>             Fix For: 2.14
>
>         Attachments: stack.txt, SUREFIRE-946.patch
>
>
> Java 7u7, Surefire with JUnit {{forkMode="perthread"}} + {{threadCount="1"}} + {{reuseForks="true"}}.
After pressing Ctrl-C to stop the Maven test run, the process hangs and must be killed with
SIGKILL. From the thread dump, {{CommandLineUtils.ProcessHook}} and {{StreamFeeder}} look
responsible.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message