Bug 379616

Summary: Deadlock when using SFTP plugin
Product: [Applications] kdeconnect Reporter: Giedrius Stanevicius <iksius>
Component: android-applicationAssignee: Albert Vaca Cintora <albertvaka>
Status: RESOLVED WORKSFORME    
Severity: major CC: justin.zobel
Priority: NOR    
Version First Reported In: unspecified   
Target Milestone: ---   
Platform: Android   
OS: Android 6.x   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Giedrius Stanevicius 2017-05-07 20:47:18 UTC
It looks like there might be a deadlock condition when stopping SSH server. Here is threads log:

"Thread-16322@5477" prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks Thread-16322@5477
	  at java.lang.Object.wait(Object.java:-1)
	  at java.lang.Thread.parkFor$(Thread.java:1220)
	  - locked <0x161c> (a java.lang.Object)
	  at sun.misc.Unsafe.park(Unsafe.java:299)
	  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	  at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:810)
	  at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:970)
	  at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1278)
	  at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:203)
	  at org.apache.sshd.SshServer.stop(SshServer.java:383)
	  at org.apache.sshd.SshServer.stop(SshServer.java:363)
	  at org.kde.kdeconnect.Plugins.SftpPlugin.SimpleSftpServer.stop(SimpleSftpServer.java:128)
	  at org.kde.kdeconnect.Plugins.SftpPlugin.SftpPlugin.onDestroy(SftpPlugin.java:59)
	  at org.kde.kdeconnect.Device.removePlugin(Device.java:742)
	  - locked <0x160a> (a org.kde.kdeconnect.Device)
	  at org.kde.kdeconnect.Device.reloadPluginsFromSettings(Device.java:791)
	  at org.kde.kdeconnect.Device.removeLink(Device.java:530)
	  at org.kde.kdeconnect.BackgroundService$5.onConnectionLost(BackgroundService.java:204)
	  at org.kde.kdeconnect.Backends.BaseLinkProvider.connectionLost(BaseLinkProvider.java:54)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider.linkDisconnected(LanLinkProvider.java:89)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLink$1.run(LanLink.java:118)
	  at java.lang.Thread.run(Thread.java:818)

"pool-11-thread-1@5478" prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks pool-11-thread-1@5478
	  at java.lang.Object.wait(Object.java:-1)
	  at java.lang.Thread.parkFor$(Thread.java:1220)
	  - locked <0x161d> (a java.lang.Object)
	  at sun.misc.Unsafe.park(Unsafe.java:299)
	  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
	  at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1078)
	  at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:806)
	  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1036)
	  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
	  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
	  at java.lang.Thread.run(Thread.java:818)

"Thread-16332@5482" prio=5 waiting for monitor entry
  java.lang.Thread.State: BLOCKED
	 waiting for Thread-16322@5477 to release lock on <0x160a> (a org.kde.kdeconnect.Device)
	  at org.kde.kdeconnect.Device.addPlugin(Device.java:692)
	  at org.kde.kdeconnect.Device.reloadPluginsFromSettings(Device.java:780)
	  at org.kde.kdeconnect.Device.addLink(Device.java:507)
	  at org.kde.kdeconnect.BackgroundService$5.onConnectionReceived(BackgroundService.java:181)
	  at org.kde.kdeconnect.Backends.BaseLinkProvider.connectionAccepted(BaseLinkProvider.java:48)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider.addLink(LanLinkProvider.java:290)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider.access$100(LanLinkProvider.java:62)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider$3.handshakeCompleted(LanLinkProvider.java:235)
	  at com.android.org.conscrypt.OpenSSLSocketImpl.notifyHandshakeCompletedListeners(OpenSSLSocketImpl.java:519)
	  at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:377)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider$4.run(LanLinkProvider.java:255)
	  at java.lang.Thread.run(Thread.java:818)

"pool-1-thread-1@5470" prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks pool-1-thread-1@5470
	  at java.lang.Object.wait(Object.java:-1)
	  at java.lang.Thread.parkFor$(Thread.java:1220)
	  - locked <0x161b> (a java.lang.Object)
	  at sun.misc.Unsafe.park(Unsafe.java:299)
	  at java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
	  at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2013)
	  at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:410)
	  at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1036)
	  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1098)
	  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
	  at java.lang.Thread.run(Thread.java:818)

"FinalizerDaemon@5465" daemon prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks FinalizerDaemon@5465
	  at java.lang.Object.wait(Object.java:-1)
	  at java.lang.Object.wait(Object.java:423)
	  at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:101)
	  - locked <0x1572> (a java.lang.ref.ReferenceQueue)
	  at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:72)
	  at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:185)
	  at java.lang.Thread.run(Thread.java:818)

"Thread-16233@5474" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	  at libcore.io.Posix.accept(Posix.java:-1)
	  at libcore.io.BlockGuardOs.accept(BlockGuardOs.java:63)
	  at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:89)
	  at java.net.ServerSocket.implAccept(ServerSocket.java:217)
	  - locked <0x1583> (a java.net.ServerSocket)
	  at java.net.ServerSocket.accept(ServerSocket.java:141)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider$6.run(LanLinkProvider.java:339)
	  at java.lang.Thread.run(Thread.java:818)

"Thread-16327@5479" prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks Thread-16327@5479
	  at java.lang.Object.wait(Object.java:-1)
	  at org.apache.sshd.common.channel.ChannelPipedInputStream.read(ChannelPipedInputStream.java:85)
	  - locked <0x161e> (a org.apache.sshd.common.util.Buffer)
	  at libcore.io.Streams.readFully(Streams.java:81)
	  at java.io.DataInputStream.readInt(DataInputStream.java:103)
	  at org.apache.sshd.server.sftp.SftpSubsystem.run(SftpSubsystem.java:464)
	  at java.lang.Thread.run(Thread.java:818)

"Thread-16329@5480" prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks Thread-16329@5480
	  at java.lang.Object.wait(Object.java:-1)
	  at org.apache.sshd.common.channel.ChannelPipedInputStream.read(ChannelPipedInputStream.java:85)
	  - locked <0x161f> (a org.apache.sshd.common.util.Buffer)
	  at libcore.io.Streams.readFully(Streams.java:81)
	  at java.io.DataInputStream.readInt(DataInputStream.java:103)
	  at org.apache.sshd.server.sftp.SftpSubsystem.run(SftpSubsystem.java:464)
	  at java.lang.Thread.run(Thread.java:818)

"main@5462" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	  at android.os.MessageQueue.nativePollOnce(MessageQueue.java:-1)
	  at android.os.MessageQueue.next(MessageQueue.java:323)
	  at android.os.Looper.loop(Looper.java:135)
	  at android.app.ActivityThread.main(ActivityThread.java:5458)
	  at java.lang.reflect.Method.invoke(Method.java:-1)
	  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
	  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)

"Thread-16333@5483" prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks Thread-16333@5483
	  at java.lang.Object.wait(Object.java:-1)
	  at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:636)
	  - locked <0x1620> (a java.lang.Object)
	  at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:591)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLink$1.run(LanLink.java:96)
	  at java.lang.Thread.run(Thread.java:818)

"FinalizerWatchdogDaemon@5466" daemon prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks FinalizerWatchdogDaemon@5466
	  at java.lang.Object.wait(Object.java:-1)
	  at java.lang.Daemons$FinalizerWatchdogDaemon.waitForObject(Daemons.java:255)
	  - locked <0x1574> (a java.lang.Daemons$FinalizerWatchdogDaemon)
	  at java.lang.Daemons$FinalizerWatchdogDaemon.run(Daemons.java:227)
	  at java.lang.Thread.run(Thread.java:818)

"ReferenceQueueDaemon@5464" daemon prio=5 waiting
  java.lang.Thread.State: WAITING
	 blocks ReferenceQueueDaemon@5464
	  at java.lang.Object.wait(Object.java:-1)
	  at java.lang.Daemons$ReferenceQueueDaemon.run(Daemons.java:147)
	  - locked <0x1187> (a java.lang.Class)
	  at java.lang.Thread.run(Thread.java:818)

"HeapTaskDaemon@5467" daemon prio=5 waiting for monitor entry
  java.lang.Thread.State: BLOCKED
	  at dalvik.system.VMRuntime.runHeapTasks(VMRuntime.java:-1)
	  at java.lang.Daemons$HeapTaskDaemon.run(Daemons.java:355)
	  at java.lang.Thread.run(Thread.java:818)

"Thread-16231@5472" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	  at libcore.io.Posix.recvfromBytes(Posix.java:-1)
	  at libcore.io.Posix.recvfrom(Posix.java:189)
	  at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
	  at libcore.io.IoBridge.recvfrom(IoBridge.java:549)
	  at java.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:163)
	  at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:171)
	  at java.net.DatagramSocket.receive(DatagramSocket.java:274)
	  - locked <0x1570> (a java.net.DatagramSocket)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider$5.run(LanLinkProvider.java:317)
	  at java.lang.Thread.run(Thread.java:818)

"Thread-16232@5473" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	  at libcore.io.Posix.recvfromBytes(Posix.java:-1)
	  at libcore.io.Posix.recvfrom(Posix.java:189)
	  at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
	  at libcore.io.IoBridge.recvfrom(IoBridge.java:549)
	  at java.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:163)
	  at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:171)
	  at java.net.DatagramSocket.receive(DatagramSocket.java:274)
	  - locked <0x1586> (a java.net.DatagramSocket)
	  at org.kde.kdeconnect.Backends.LanBackend.LanLinkProvider$5.run(LanLinkProvider.java:317)
	  at java.lang.Thread.run(Thread.java:818)

"Signal Catcher@5463" daemon prio=5 waiting
  java.lang.Thread.State: WAITING
	 Incompatible thread state: thread not suspended

"Binder_1@5468" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	 Incompatible thread state: thread not suspended

"Binder_2@5469" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	 Incompatible thread state: thread not suspended

"RenderThread@5471" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	 Incompatible thread state: thread not suspended

"hwuiTask1@5475" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	 Incompatible thread state: thread not suspended

"hwuiTask2@5476" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	 Incompatible thread state: thread not suspended

"Binder_3@5481" prio=5 runnable
  java.lang.Thread.State: RUNNABLE
	 Incompatible thread state: thread not suspended

 The application seems to be stuck in such state until I manually killed it.
Comment 1 Justin Zobel 2020-11-20 05:23:50 UTC
Can you please test and confirm if this issue is still occurring or if this bug report can be marked as resolved. I'm setting status to "needsinfo" pending your response, please change back to "reported" or "resolved" when you respond, thanks.
Comment 2 Bug Janitor Service 2020-12-05 04:34:00 UTC
Dear Bug Submitter,

This bug has been in NEEDSINFO status with no change for at least
15 days. Please provide the requested information as soon as
possible and set the bug status as REPORTED. Due to regular bug
tracker maintenance, if the bug is still in NEEDSINFO status with
no change in 30 days the bug will be closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

If you have already provided the requested information, please
mark the bug as REPORTED so that the KDE team knows that the bug is
ready to be confirmed.

Thank you for helping us make KDE software even better for everyone!
Comment 3 Bug Janitor Service 2020-12-20 04:34:34 UTC
This bug has been in NEEDSINFO status with no change for at least
30 days. The bug is now closed as RESOLVED > WORKSFORME
due to lack of needed information.

For more information about our bug triaging procedures please read the
wiki located here:
https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging

Thank you for helping us make KDE software even better for everyone!