Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ftp: Fix deadlock introduced in recent refactoring
Recent changes to the FTP door introduced a deadlock: "pool-116-thread-7": at org.dcache.ftp.door.AbstractFtpDoorV1.setTransfer(AbstractFtpDoorV1.java:2380) - waiting to lock <0x00000007c5eade98> (a org.dcache.ftp.door.GsiFtpDoorV1) at org.dcache.ftp.door.AbstractFtpDoorV1$FtpTransfer.transferCompleted(AbstractFtpDoorV1.java:1022) - locked <0x00000007c5eb3860> (a org.dcache.ftp.door.AbstractFtpDoorV1$FtpTransfer) at org.dcache.ftp.door.AbstractFtpDoorV1$FtpTransfer.finished(AbstractFtpDoorV1.java:972) at org.dcache.util.Transfer.finished(Transfer.java:464) - locked <0x00000007c5eb3860> (a org.dcache.ftp.door.AbstractFtpDoorV1$FtpTransfer) at org.dcache.ftp.door.AbstractFtpDoorV1.messageArrived(AbstractFtpDoorV1.java:1444) at sun.reflect.GeneratedMethodAccessor132.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.dcache.cells.CellMessageDispatcher$ShortReceiver.deliver(CellMessageDispatcher.java:289) at org.dcache.cells.CellMessageDispatcher.call(CellMessageDispatcher.java:202) at org.dcache.cells.AbstractCell.messageArrived(AbstractCell.java:859) at dmg.cells.nucleus.CellAdapter.messageArrived(CellAdapter.java:981) at dmg.cells.nucleus.CellNucleus$DeliverMessageTask.innerRun(CellNucleus.java:1037) at dmg.cells.nucleus.CellNucleus$AbstractNucleusTask.run(CellNucleus.java:946) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) "Thread-160": at org.dcache.ftp.door.AbstractFtpDoorV1$FtpTransfer.abort(AbstractFtpDoorV1.java:1060) - waiting to lock <0x00000007c5eb3860> (a org.dcache.ftp.door.AbstractFtpDoorV1$FtpTransfer) at org.dcache.ftp.door.AbstractFtpDoorV1$FtpTransfer.abort(AbstractFtpDoorV1.java:1036) at org.dcache.ftp.door.AbstractFtpDoorV1.shutdown(AbstractFtpDoorV1.java:1363) - locked <0x00000007c5eade98> (a org.dcache.ftp.door.GsiFtpDoorV1) at diskCacheV111.doors.LineBasedDoor$CommandQueue.stop(LineBasedDoor.java:343) - locked <0x00000007c5ed1290> (a diskCacheV111.doors.LineBasedDoor$CommandQueue) at diskCacheV111.doors.LineBasedDoor.run(LineBasedDoor.java:176) at java.lang.Thread.run(Thread.java:744) This deadlock is caused by unnecessary synchronization in the shutdown method. This synchronization did not exist in the old code. The patch also adds an accessor for the transfer field, thus solving potential race conditions. Target: trunk Require-notes: no Require-book: no Acked-by: Tigran Mkrtchyan <tigran.mkrtchyan@desy.de> Patch: http://rb.dcache.org/r/6318/
- Loading branch information