FULL PRODUCT VERSION :
ADDITIONAL OS VERSION INFORMATION :
Distributor ID: Ubuntu
Description: Ubuntu 9.10
Release: 9.10
Codename: karmic
A DESCRIPTION OF THE PROBLEM :
See the following stack traces:
Name: FuseWorker-22
State: BLOCKED on java.lang.Object@7e06f974 owned by: Thread-6
Total blocked: 2 Total waited: 12
Stack trace:
java.lang.Thread.interrupt(Thread.java:955)
java.nio.Bits.reserveMemory(Bits.java:654)
java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:306)
sun.nio.ch.IOUtil.read(IOUtil.java:195)
cs.csun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:174)
sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:149)
- locked java.lang.Object@20698cff
sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
- locked sun.nio.ch.ChannelInputStream@3ebcf313
java.nio.file.Files.read(Files.java:2934)
java.nio.file.Files.readAllBytes(Files.java:2987)
fudj.kernel.FuseWorker.run(FuseWorker.java:80)
...
===========================================
Name: Thread-6
State: WAITING on sun.nio.ch.NativeThreadSet@49682fa2
Total blocked: 2 Total waited: 2
Stack trace:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:503)
sun.nio.ch.NativeThreadSet.signalAndWait(NativeThreadSet.java:102)
java.nio.channels.spi.AbstractInterruptibleChannel$1.interrupt(AbstractInterruptibleChannel.java:165)
sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:119)
- locked java.lang.Object@1ad14292
java.lang.Thread.interrupt(Thread.java:958)
- locked java.lang.Object@7e06f974
fudj.kernel.FuseWorker.stopWorker(FuseWorker.java:124)
...
FuseWorker-22 reads a large file using Files.readAllBytes(). It needs a large chunk of direct memory and goes into Bits.reserveMemory() which triggers a GC. During sleep it was interrupted and called java.lang.Thread.interrupt(). This is blocked on java.lang.Thread.interrupt.blockerLock (java.lang.Object@7e06f974).
Thread-6 locks java.lang.Thread.interrupt.blockerLock (java.lang.Object@7e06f974) and wait for FuseWorker-22 to exit reading. The two threads deadlocks.
REPRODUCIBILITY :
This bug can be reproduced often.
ADDITIONAL OS VERSION INFORMATION :
Distributor ID: Ubuntu
Description: Ubuntu 9.10
Release: 9.10
Codename: karmic
A DESCRIPTION OF THE PROBLEM :
See the following stack traces:
Name: FuseWorker-22
State: BLOCKED on java.lang.Object@7e06f974 owned by: Thread-6
Total blocked: 2 Total waited: 12
Stack trace:
java.lang.Thread.interrupt(Thread.java:955)
java.nio.Bits.reserveMemory(Bits.java:654)
java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:306)
sun.nio.ch.IOUtil.read(IOUtil.java:195)
cs.csun.nio.ch.Util.getTemporaryDirectBuffer(Util.java:174)
sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:149)
- locked java.lang.Object@20698cff
sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
- locked sun.nio.ch.ChannelInputStream@3ebcf313
java.nio.file.Files.read(Files.java:2934)
java.nio.file.Files.readAllBytes(Files.java:2987)
fudj.kernel.FuseWorker.run(FuseWorker.java:80)
...
===========================================
Name: Thread-6
State: WAITING on sun.nio.ch.NativeThreadSet@49682fa2
Total blocked: 2 Total waited: 2
Stack trace:
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:503)
sun.nio.ch.NativeThreadSet.signalAndWait(NativeThreadSet.java:102)
java.nio.channels.spi.AbstractInterruptibleChannel$1.interrupt(AbstractInterruptibleChannel.java:165)
sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:119)
- locked java.lang.Object@1ad14292
java.lang.Thread.interrupt(Thread.java:958)
- locked java.lang.Object@7e06f974
fudj.kernel.FuseWorker.stopWorker(FuseWorker.java:124)
...
FuseWorker-22 reads a large file using Files.readAllBytes(). It needs a large chunk of direct memory and goes into Bits.reserveMemory() which triggers a GC. During sleep it was interrupted and called java.lang.Thread.interrupt(). This is blocked on java.lang.Thread.interrupt.blockerLock (java.lang.Object@7e06f974).
Thread-6 locks java.lang.Thread.interrupt.blockerLock (java.lang.Object@7e06f974) and wait for FuseWorker-22 to exit reading. The two threads deadlocks.
REPRODUCIBILITY :
This bug can be reproduced often.