Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
0.8.0
-
None
-
Apple Java v. 1.6.0
Description
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);