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

(bf) MappedByteBuffer.get() can provoke crash with EXCEPTION_IN_PAGE_ERROR

XMLWordPrintable

    • b34
    • x86
    • windows_xp

      FULL PRODUCT VERSION :
      java version "1.5.0_06"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
      Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)

      FULL OS VERSION :
      Windows XP Professional x64 Edition

      A DESCRIPTION OF THE PROBLEM :
      #
      # An unexpected error has been detected by HotSpot Virtual Machine:
      #
      # EXCEPTION_IN_PAGE_ERROR (0xc0000006) at pc=0x6d7f3d0c, pid=1756, tid=2180
      #
      # Java VM: Java HotSpot(TM) Client VM (1.5.0_06-b05 mixed mode)
      # Problematic frame:
      # V [jvm.dll+0x113d0c]

      Stepping through the code (as far as I could) this got thrown in java.nio.DirectByteBuffer get() method while calling unsafe.getByte():

      public byte get() {
         return ((unsafe.getByte(ix(nextGetIndex()))));
      }

      THE PROBLEM WAS REPRODUCIBLE WITH -Xint FLAG: Yes

      THE PROBLEM WAS REPRODUCIBLE WITH -server FLAG: Yes

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      See source code for an executable test case

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      buffer.get() should stick some bytes into the byte array file but I get an EXCEPTION_IN_PAGE_ERROR instead
      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      #
      # An unexpected error has been detected by HotSpot Virtual Machine:
      #
      # EXCEPTION_IN_PAGE_ERROR (0xc0000006) at pc=0x6db22eef, pid=332, tid=1352
      #
      # Java VM: Java HotSpot(TM) Server VM (1.5.0_06-b05 mixed mode)
      # Problematic frame:
      # V [jvm.dll+0x2a2eef]
      #

      --------------- T H R E A D ---------------

      Current thread (0x00036030): JavaThread "main" [_thread_in_vm, id=1352]

      siginfo: ExceptionCode=0xc0000006, ExceptionInformation=0x00000000 0x01c30000 0xc0000309

      Registers:
      EAX=0x00036030, EBX=0x03dfbcf0, ECX=0x00000002, EDX=0x01c30000
      ESP=0x0016fa2c, EBP=0x0016fa38, ESI=0x00036030, EDI=0x00036030
      EIP=0x6db22eef, EFLAGS=0x00010246

        Top of Stack: (sp=0x0016fa2c)
      0x0016fa2c: 00036030 03dfbcf0 03dfbcf0 0016fa6c
      0x0016fa3c: 01d6864c 000360f0 0016fa84 01c30000
      0x0016fa4c: 00000000 0016fa50 00000000 0016fa84
      0x0016fa5c: 03dfdd60 00000000 03dfbcf0 0016fa7c
      0x0016fa6c: 0016faa4 01d62aeb 00000000 01d664f1
      0x0016fa7c: 01c30000 00000000 244832c0 0016fa88
      0x0016fa8c: 03ee74b3 0016faac 03eea108 00000000
      0x0016fa9c: 03ee74c0 0016faac 0016facc 01d62aeb

      Instructions: (pc=0x6db22eef)
      0x6db22edf: e1 b3 6d 8b 55 10 c7 80 04 01 00 00 01 00 00 00
      0x6db22eef: 8a 0a c7 80 04 01 00 00 00 00 00 00 8b 7e 2c 88


      Stack: [0x00130000,0x00170000), sp=0x0016fa2c, free space=254k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      V [jvm.dll+0x2a2eef]
      j sun.misc.Unsafe.getByte(J)B+0
      j java.nio.DirectByteBuffer.get()B+11
      j net.borlin.dvd.util.FileCopyUtil.main([Ljava/lang/String;)V+76
      v ~StubRoutines::call_stub
      V [jvm.dll+0xf7040]

      Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
      j sun.misc.Unsafe.getByte(J)B+0
      j java.nio.DirectByteBuffer.get()B+11
      j net.borlin.dvd.util.FileCopyUtil.main([Ljava/lang/String;)V+76
      v ~StubRoutines::call_stub

      --------------- P R O C E S S ---------------

      Java Threads: ( => current thread )
        0x2814a060 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=2084]
        0x28148cb8 JavaThread "CompilerThread1" daemon [_thread_blocked, id=1368]
        0x28147e48 JavaThread "CompilerThread0" daemon [_thread_blocked, id=2668]
        0x28146f10 JavaThread "AdapterThread" daemon [_thread_blocked, id=452]
        0x28146268 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2964]
        0x01d5ce90 JavaThread "Finalizer" daemon [_thread_blocked, id=2200]
        0x01d5ca00 JavaThread "Reference Handler" daemon [_thread_blocked, id=1400]
      =>0x00036030 JavaThread "main" [_thread_in_vm, id=1352]

      Other Threads:
        0x01d5a860 VMThread [id=1068]
        0x28146180 WatcherThread [id=1736]

      VM state:not at safepoint (normal execution)

      VM Mutex/Monitor currently owned by a thread: None

      Heap
       PSYoungGen total 3584K, used 322K [0x24480000, 0x24880000, 0x27d60000)
        eden space 3072K, 10% used [0x24480000,0x244d0b30,0x24780000)
        from space 512K, 0% used [0x24800000,0x24800000,0x24880000)
        to space 512K, 0% used [0x24780000,0x24780000,0x24800000)
       PSOldGen total 29184K, used 0K [0x07d60000, 0x099e0000, 0x24480000)
        object space 29184K, 0% used [0x07d60000,0x07d60000,0x099e0000)
       PSPermGen total 16384K, used 1581K [0x03d60000, 0x04d60000, 0x07d60000)
        object space 16384K, 9% used [0x03d60000,0x03eeb688,0x04d60000)

      Dynamic libraries:
      0x00400000 - 0x0040c000 C:\Program Files (x86)\Java\jdk1.5.0_06\bin\java.exe
      0x7d600000 - 0x7d6f0000 C:\WINDOWS\system32\ntdll.dll
      0x7d4c0000 - 0x7d5f0000 C:\WINDOWS\syswow64\kernel32.dll
      0x77f50000 - 0x77fec000 C:\WINDOWS\syswow64\ADVAPI32.dll
      0x7da20000 - 0x7db00000 C:\WINDOWS\syswow64\RPCRT4.dll
      0x77ba0000 - 0x77bfa000 C:\WINDOWS\syswow64\MSVCRT.dll
      0x6d880000 - 0x6dc31000 C:\Program Files (x86)\Java\jdk1.5.0_06\jre\bin\server\jvm.dll
      0x7d930000 - 0x7da00000 C:\WINDOWS\syswow64\USER32.dll
      0x7d800000 - 0x7d890000 C:\WINDOWS\syswow64\GDI32.dll
      0x76aa0000 - 0x76acd000 C:\WINDOWS\system32\WINMM.dll
      0x6d2f0000 - 0x6d2f8000 C:\Program Files (x86)\Java\jdk1.5.0_06\jre\bin\hpi.dll
      0x76b70000 - 0x76b7b000 C:\WINDOWS\system32\PSAPI.DLL
      0x6d6b0000 - 0x6d6bc000 C:\Program Files (x86)\Java\jdk1.5.0_06\jre\bin\verify.dll
      0x6d370000 - 0x6d38d000 C:\Program Files (x86)\Java\jdk1.5.0_06\jre\bin\java.dll
      0x6d6d0000 - 0x6d6df000 C:\Program Files (x86)\Java\jdk1.5.0_06\jre\bin\zip.dll
      0x6d530000 - 0x6d543000 C:\Program Files (x86)\Java\jdk1.5.0_06\jre\bin\net.dll
      0x71c00000 - 0x71c17000 C:\WINDOWS\system32\WS2_32.dll
      0x71bf0000 - 0x71bf8000 C:\WINDOWS\system32\WS2HELP.dll
      0x6d550000 - 0x6d559000 C:\Program Files (x86)\Java\jdk1.5.0_06\jre\bin\nio.dll

      VM Arguments:
      java_command: net.borlin.dvd.util.FileCopyUtil e:\video_ts\video_ts.vob C:\Documents and Settings\Phil\My Documents\movies\Short Circuit\video_ts.vob
      Launcher Type: SUN_STANDARD

      Environment Variables:
      CLASSPATH=.;.;C:\PROGRA~2\JMF21~1.1E\lib\sound.jar;C:\PROGRA~2\JMF21~1.1E\lib\jmf.jar;C:\PROGRA~2\JMF21~1.1E\lib;
      PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
      USERNAME=Phil
      OS=Windows_NT
      PROCESSOR_IDENTIFIER=AMD64 Family 15 Model 43 Stepping 1, AuthenticAMD



      --------------- S Y S T E M ---------------

      OS: Windows Server 2003 family Build 3790 Service Pack 1

      CPU:total 2 family 47, cmov, cx8, fxsr, mmx, sse, sse2, ht

      Memory: 4k page, physical 2096512k(1474812k free), swap 4059224k(3561804k free)

      vm_info: Java HotSpot(TM) Server VM (1.5.0_06-b05) for windows-x86, built on Nov 10 2005 10:53:00 by "java_re" with MS VC++ 6.0



      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      A simple class that will reproduce this is:
      usage: java FileCopyUtil <filename>

      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileNotFoundException;
      import java.io.IOException;
      import java.nio.MappedByteBuffer;
      import java.nio.channels.FileChannel;
      import java.nio.channels.FileChannel.MapMode;

      public class FileCopyUtil {

      public FileCopyUtil() {

      }

      /**
      * @param args
      */
      public static void main(String[] args) {
      File src = new File(args[0]);

      try {
      byte[] file = new byte[(int) src.length()];
      FileChannel channel = new FileInputStream(src).getChannel();
      MappedByteBuffer buffer = channel.map(MapMode.READ_ONLY, 0, src.length());
      buffer.get(file);
      } catch (FileNotFoundException e) {
      e.printStackTrace();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }

      }
      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Use InputStreams into of channels

            jcm Jamsheed C M (Inactive)
            ndcosta Nelson Dcosta (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            12 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: