Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8132445

(fs) Files.readAllBytes() deadlock while reading a large file and interrupted

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Not an Issue
    • Icon: P4 P4
    • None
    • 7u80
    • core-libs
    • x86_64
    • linux_ubuntu

      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.

            alanb Alan Bateman
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: