JDK-6319783 : VM Crash when changing the display mode from low resolution to higher res, win32 + noddraw
  • Type: Bug
  • Component: client-libs
  • Sub-Component: 2d
  • Affected Version: 6
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2005-09-04
  • Updated: 2010-04-02
  • Resolved: 2006-03-02
Related Reports
Duplicate :  
Description
I am running the attached application on WinXP Prof-sp2 with noddraw flag. This XP machine is having NVidia GeForce4 MX4000 with 77.77 nvidia driver and the latest DirectX. 

To reproduce the bug do the following:
1. run the attached test with noddraw flag. you would see all display modes being listed. 
2. Select the first 320x200x8 resolution mode and click on SetDisplay. Display will be set.
3. Select 1200x1024x32 display mode and click 'Set Display'. Display Mode will be set.
4. Select the next 320x200x8 display mode and click 'Set Display'. 
5. Repeat step-3. 

Like this repeat the above steps for all the display modes of resolution 320x200x8 and alternate them with 1200x1024x32. During this process, you will encounter the VM crash when choosing the 1200x1024x32 display mode 3rd or 4th time. 

This is noticed on Mustang-b50 as well as the current PIT build. This is not reproducible with Tiger-FCS. On OpenGL, changing from 8bit to 32 bit mode will immediately cause the VM crash on the PIT build. Looks like this is a regression introduced in Mustang on noddraw. With DDRAW, everything works fine.

Here is the log information for the crash:

#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0b373b38, pid=2220, tid=3256
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0-ea-b49 mixed mode)
# Problematic frame:
# C  [awt.dll+0xe3b38]
#

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

Current thread (0x0b0a6000):  JavaThread "AWT-Windows" daemon [_thread_in_native, id=3256]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000400

Registers:
EAX=0x00000400, EBX=0x0b21bc00, ECX=0x00000100, EDX=0xffffff10
ESP=0x0b7be810, EBP=0x0b7bec60, ESI=0x00000400, EDI=0x0b7be860
EIP=0x0b373b38, EFLAGS=0x00010206

Top of Stack: (sp=0x0b7be810)
0x0b7be810:   00000000 0b0a60b8 00000000 83010728
0x0b7be820:   00000140 000000f0 00000000 0000000a
0x0b7be830:   00000000 00000001 00000028 00000140
0x0b7be840:   ffffff10 00080001 00000000 00000000
0x0b7be850:   00000000 00000000 00000000 00000000
0x0b7be860:   00000400 00000000 0b7be878 77d4dbe5
0x0b7be870:   0b7beae8 00000001 0b7beb88 0b80aace
0x0b7be880:   0b7beae8 0055ff90 0b7be900 0b7bf1b8 

Instructions: (pc=0x0b373b38)
0x0b373b28:   e8 73 2b 04 00 8b f0 b9 00 01 00 00 8d 7c 24 50
0x0b373b38:   f3 a5 8b 75 10 8b 7c 24 24 33 c0 eb 15 8b 53 58 


Stack: [0x0b6c0000,0x0b7c0000),  sp=0x0b7be810,  free space=1018k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [awt.dll+0xe3b38]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J  sun.java2d.loops.Blit.Blit(Lsun/java2d/SurfaceData;Lsun/java2d/SurfaceData;Ljava/awt/Composite;Lsun/java2d/pipe/Region;IIIIII)V
J  sun.java2d.pipe.DrawImage.blitSurfaceData(Lsun/java2d/SunGraphics2D;Lsun/java2d/pipe/Region;Lsun/java2d/SurfaceData;Lsun/java2d/SurfaceData;Lsun/java2d/loops/SurfaceType;Lsun/java2d/loops/SurfaceType;IIIIIILjava/awt/Color;)V
J  sun.java2d.pipe.DrawImage.renderImageCopy(Lsun/java2d/SunGraphics2D;Ljava/awt/Image;Ljava/awt/Color;IIIIII)Z
J  sun.java2d.pipe.DrawImage.copyImage(Lsun/java2d/SunGraphics2D;Ljava/awt/Image;IIIIIILjava/awt/Color;)Z
J  sun.java2d.pipe.DrawImage.copyImage(Lsun/java2d/SunGraphics2D;Ljava/awt/Image;IIIIIILjava/awt/Color;Ljava/awt/image/ImageObserver;)Z
j  sun.java2d.pipe.ValidatePipe.copyImage(Lsun/java2d/SunGraphics2D;Ljava/awt/Image;IIIIIILjava/awt/Color;Ljava/awt/image/ImageObserver;)Z+29
J  sun.java2d.SunGraphics2D.copyImage(Ljava/awt/Image;IIIIIILjava/awt/Color;Ljava/awt/image/ImageObserver;)Z
J  sun.java2d.SunGraphics2D.drawImage(Ljava/awt/Image;IIIIIIIILjava/awt/Color;Ljava/awt/image/ImageObserver;)Z
J  java.awt.Component$BltBufferStrategy.showSubRegion(IIII)V
j  java.awt.Component$BltSubRegionBufferStrategy.validateAndShow(IIII)Z+25
j  javax.swing.BufferStrategyPaintManager.show(Ljava/awt/Container;IIII)Z+108
j  javax.swing.RepaintManager.show(Ljava/awt/Container;IIII)Z+11
j  javax.swing.SwingPaintEventDispatcher.createPaintEvent(Ljava/awt/Component;IIII)Ljava/awt/event/PaintEvent;+38
j  sun.awt.windows.WComponentPeer.postPaintIfNecessary(IIII)V+28
j  sun.awt.windows.WComponentPeer.handleExpose(IIII)V+6
v  ~StubRoutines::call_stub
j  sun.awt.windows.WToolkit.eventLoop()V+0
j  sun.awt.windows.WToolkit.run()V+69
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub

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

Java Threads: ( => current thread )
  0x0b1bb700 JavaThread "TimerQueue" daemon [_thread_blocked, id=2380]
  0x00037100 JavaThread "DestroyJavaVM" [_thread_blocked, id=3408]
  0x0b13a800 JavaThread "AWT-EventQueue-0" [_thread_in_native, id=3416]
=>0x0b0a6000 JavaThread "AWT-Windows" daemon [_thread_in_native, id=3256]
  0x0b0b4300 JavaThread "AWT-Shutdown" [_thread_blocked, id=2444]
  0x0b0ecd00 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=2756]
  0x0aacb700 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=3064]
  0x0aac9200 JavaThread "CompilerThread0" daemon [_thread_blocked, id=2732]
  0x0aac8400 JavaThread "Attach Listener" daemon [_thread_blocked, id=3264]
  0x0aac7900 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=3960]
  0x0aab3700 JavaThread "Finalizer" daemon [_thread_blocked, id=1996]
  0x0aab2200 JavaThread "Reference Handler" daemon [_thread_blocked, id=3184]

Other Threads:
  0x0aaadc00 VMThread [id=3284]
  0x0aacca00 WatcherThread [id=4080]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 def new generation   total 576K, used 36K [0x02930000, 0x029d0000, 0x02e10000)
  eden space 512K,   2% used [0x02930000, 0x02932dc0, 0x029b0000)
  from space 64K,  39% used [0x029c0000, 0x029c6418, 0x029d0000)
  to   space 64K,   0% used [0x029b0000, 0x029b0000, 0x029c0000)
 tenured generation   total 6384K, used 5912K [0x02e10000, 0x0344c000, 0x06930000)
   the space 6384K,  92% used [0x02e10000, 0x033d62d8, 0x033d6400, 0x0344c000)
 compacting perm gen  total 12288K, used 6522K [0x06930000, 0x07530000, 0x0a930000)
   the space 12288K,  53% used [0x06930000, 0x06f8ead8, 0x06f8ec00, 0x07530000)
No shared spaces configured.

Dynamic libraries:
0x00400000 - 0x00415000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\bin\java.exe
0x7c900000 - 0x7c9b0000 	C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c8f4000 	C:\WINDOWS\system32\kernel32.dll
0x77dd0000 - 0x77e6b000 	C:\WINDOWS\system32\ADVAPI32.dll
0x77e70000 - 0x77f01000 	C:\WINDOWS\system32\RPCRT4.dll
0x7c340000 - 0x7c396000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\bin\MSVCR71.dll
0x6da40000 - 0x6dc52000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\client\jvm.dll
0x77d40000 - 0x77dd0000 	C:\WINDOWS\system32\USER32.dll
0x77f10000 - 0x77f56000 	C:\WINDOWS\system32\GDI32.dll
0x76b40000 - 0x76b6d000 	C:\WINDOWS\system32\WINMM.dll
0x7c3a0000 - 0x7c41b000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\bin\MSVCP71.dll
0x10000000 - 0x10008000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\hpi.dll
0x76bf0000 - 0x76bfb000 	C:\WINDOWS\system32\PSAPI.DLL
0x003c0000 - 0x003cc000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\verify.dll
0x003d0000 - 0x003f0000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\java.dll
0x003f0000 - 0x003ff000 	y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\zip.dll
0x0b290000 - 0x0b443000 	Y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\awt.dll
0x73000000 - 0x73026000 	C:\WINDOWS\system32\WINSPOOL.DRV
0x77c10000 - 0x77c68000 	C:\WINDOWS\system32\msvcrt.dll
0x76390000 - 0x763ad000 	C:\WINDOWS\system32\IMM32.dll
0x774e0000 - 0x7761d000 	C:\WINDOWS\system32\ole32.dll
0x0b470000 - 0x0b4c0000 	Y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\fontmanager.dll
0x0b7c0000 - 0x0b92f000 	C:\WINDOWS\system32\nview.dll
0x77f60000 - 0x77fd6000 	C:\WINDOWS\system32\SHLWAPI.dll
0x7c9c0000 - 0x7d1d4000 	C:\WINDOWS\system32\SHELL32.dll
0x77120000 - 0x771ac000 	C:\WINDOWS\system32\OLEAUT32.dll
0x5d090000 - 0x5d127000 	C:\WINDOWS\system32\COMCTL32.dll
0x77c00000 - 0x77c08000 	C:\WINDOWS\system32\VERSION.dll
0x773d0000 - 0x774d2000 	C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
0x77690000 - 0x776b1000 	C:\WINDOWS\system32\NTMARTA.DLL
0x76f60000 - 0x76f8c000 	C:\WINDOWS\system32\WLDAP32.dll
0x71bf0000 - 0x71c03000 	C:\WINDOWS\system32\SAMLIB.dll
0x0bb10000 - 0x0bb23000 	Y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\net.dll
0x71ab0000 - 0x71ac7000 	C:\WINDOWS\system32\WS2_32.dll
0x71aa0000 - 0x71aa8000 	C:\WINDOWS\system32\WS2HELP.dll
0x0bb30000 - 0x0bb39000 	Y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\jre\bin\nio.dll
0x0bc50000 - 0x0bc65000 	C:\WINDOWS\system32\nvwddi.dll

VM Arguments:
jvm_args: -Dsun.java2d.noddraw=True
java_command: DisplayModeTest
Launcher Type: SUN_STANDARD

Environment Variables:
PATH=y:\disk05\2d-SQE\PIT\2005-08-28.mustang\windows-i586\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\WBEM;C:\PROGRA~1\MKSTOO~1\bin;C:\PROGRA~1\MKSTOO~1\bin\x11;C:\PROGRA~1\MKSTOO~1\mksnt;C:\PROGRA~1\ULTRAE~1
USERNAME=praveen
SHELL=C:/PROGRA~1/MKSTOO~1/mksnt/sh.exe
DISPLAY=:0.0
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 15 Model 2 Stepping 9, GenuineIntel



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

OS: Windows XP Build 2600 Service Pack 2

CPU:total 1 family 15, cmov, cx8, fxsr, mmx, ht

Memory: 4k page, physical 522992k(138092k free), swap 1278288k(892604k free)

vm_info: Java HotSpot(TM) Client VM (1.6.0-ea-b49) for windows-x86, built on Aug 25 2005 02:02:25 by "java_re" with unknown MS VC++:1310

Comments
EVALUATION This bug has been fixed as part of the fix for 6366359: Fullscreen suite DisplayModeTest failing when switching from some 8-bit to 32-bit modes on WinXP The cause of the crash is exactly the same as in 6366359, so I'm going to close this bug as a duplicate of 6366359 even though it's yonger than this one.
02-03-2006

EVALUATION This is not a regression in mustang. I can reproduce the crash on 1.4.2, 5.0. The crash happens when we attempt to copy from a BufferedImage to the screen. We die in Win32SD_GetRasInfo when trying to copy the system palette to the newly allocated bitmap header: memcpy(bmi.colors.palette, wsdo->device->GetSystemPaletteEntries(), sizeof(bmi.colors.palette)); The problem is that there's no palette in the device because the device is not palettized once we switch from the 8-bit mode, so we read from some address bogus enough to cause access violation. There appears to be some kind of race condition: the Win32GraphicsDevice data (wsdo->device) had been updated while the SurfaceData still thinks it's 8-bit. It's likely that we deal with this in ddraw mode, but we haven't testsed the noddraw much before. One thing is that the noddraw mode is more likely to be used with the opengl pipeline, and the offending code path will be avoided (since in opengl mode Win32SurfaceData is not used).
14-09-2005