You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@mina.apache.org by "Guillaume Nodet (JIRA)" <ji...@apache.org> on 2013/07/17 22:13:51 UTC

[jira] [Resolved] (SSHD-225) InvertedShellWrapper does not shutdown its executor, preventing graceful JVM exit

     [ https://issues.apache.org/jira/browse/SSHD-225?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Guillaume Nodet resolved SSHD-225.
----------------------------------

    Resolution: Fixed
    
> InvertedShellWrapper does not shutdown its executor, preventing graceful JVM exit
> ---------------------------------------------------------------------------------
>
>                 Key: SSHD-225
>                 URL: https://issues.apache.org/jira/browse/SSHD-225
>             Project: MINA SSHD
>          Issue Type: Bug
>    Affects Versions: 0.8.0
>         Environment: Apple Java v. 1.6.0
>            Reporter: Chris Janicki
>            Assignee: Guillaume Nodet
>             Fix For: 0.9.0
>
>
> When embedded in my app, the following SSHD thread remains running and prevents my app from exiting gracefully (by allowing the JVM to automatically shutdown when only deamon threads remain).  I call sshd.stop(true), but this thread still remains.  Note however, than it seems to die itself after several minutes (10+).  Then my app successfully exits.  
> "pool-6-thread-1" prio=5 tid=102821800 nid=0x10e941000 waiting on condition [10e940000]
>    java.lang.Thread.State: WAITING (parking)
> 	at sun.misc.Unsafe.park(Native Method)
> 	- parking to wait for  <7eedb8190> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> 	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
> 	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
> 	at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
> 	at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:957)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:917)
> 	at java.lang.Thread.run(Thread.java:680)
> I tried the following to replace the executor's ThreadFactory with my own (this) that calls setDaemon(true) on the generated thread, but that didn't work for some reason… The thread in the dump was still not marked daemon, so maybe I'm looking at the wrong area.
> 		ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(this);
> 		sshd.setScheduledExecutorService(executor, true);

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