Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 4366221
Votes 11
Synopsis VMCrash on Win98 when the physical memory is short
Category java:classes_awt_im
Reported Against 1.3
Release Fixed 1.3.1(ladybird), 1.4(merlin-beta) (Bug ID:2117714)
State 10-Fix Delivered, bug
Priority: 2-High
Related Bugs 4295746 , 4483929 , 4702231
Submit Date 28-AUG-2000
Description
When some java application are opened, the vm-access violation occuers.
This issue will happen on Win98 when the rest of physical memory is short.

*** However, the problem is that this issue will not happen on WindowsNT4.0
with the same reproducing process on Win98. ***

1. Reproduction
 1.1 Compile the attached files with jdk1.3

   - DefaultButtonModel_Test.java 
   - JLabelTest.java 
   - BorderFactoryTest.java
   - IMMCrush.java
   
 1.2 Invoke classes

   (1) Invoke Stylepad.jar (included under the demo folder of JDK) 
       as follow.
      
       C:\jdk1.3\win32\demo\jfc\Stylepad> javaw -jar Stylepad.jar
       
   (2) Invoke other classes as follows.
     
       C:\Temp> javaw BorderFactoryTest
       C:\Temp> javaw DefaultButtonModel_Test
       C:\Temp> javaw JLabelTest
       
   (3) Invoke IMMCrush
      
       Please take care of using java command
   
       C:\Temp> java IMMCrush
       
       -> We will see the small window at the top-left of display.
       
   (4) Click the close button of IMMCush
   
       -> We will see the message as the attached file(violate33.txt) shows.
          
2. Configration
   - MPU : Pentium II 400[MHz] 
   - OS  : Windows98(2nd Edition) 
   - IME : IME98(6.00.41)
   - Memory : 128[MB]
   - JDK Ver. : build 1.3.0-C

3. Error Message
  
   Please see attached file(violate33.txt)
   and the attached JPG file(win98-crash.jpg) may be useful to understand
   the situation.
   

================================================================

   
Work Around
N/A
Evaluation
The attached tests do not compile without removing all references to classes
"Test", "Status", and "UIManagerMenu".

After making these changes, can not reproduce this problem on a Windows 98
Second Edition machine with the same amount of physical memory. This strongly
indicates that the problem is not in the VM. Suggest that it might be locale-
related; internationalization team should test on a Win98 machine with a
Japanese locale.

  xxxxx@xxxxx   2000-09-05

--------------------------------------------------------------------------

Tried the same tests on a Windows 98 machine with the Japanese locale.
Can now reproduce the crash. However, it has the following properties:
 - Appears to be correlated with low disk space: running out of space for
   the swap file?
 - Other applications than javaw crash: for example, MSDEV.
 - Unable to obtain a stack trace for the VM's thread crashing in IMM32.DLL.
   MSDEV fails to attach to the crashed process.

I strongly suspect this is not a VM bug because the debugger exhibits
instability and because the VM appears to work fine on operating systems
with full memory protection. I suspect this is a bug in the memory manager
for Windows 98 in low-memory situations. If a stack trace (with symbols)
can be provided for the crashed VM, or the bug can be reproduced on, for
example, Windows NT with the Japanese locale, we can reopen the investigation.

  xxxxx@xxxxx   2000-10-04


It's not a VM bug. To get a stack trace, you have to use remote debugging.
It crashes in an IME thread, as a result of a
::SendMessage(hWnd, WM_COMMAND, MAKEWPARAM(IDCANCEL, 0), (LPARAM)hWnd);
in awt_Toolkit.cpp:CancelAllThreadWindows().

It looks like an IME bug. To workaround the problem, we can get the
window's class name and only send WM_COMMAND if the class name doesn't
begin with "msime" or "IME".

  xxxxx@xxxxx   2000-10-04

One condition which causes this problem was that ImmDestroyContext() was
called before destroying the Window instance.  So far as I investigated,
Java code pretty much conforms to the Windows' IMM API guidelines and
seems no problem to me.  That makes me think there may be a memory
management problem in Windows 98 and I could only provide a workaround
solution that calls ImmDestroyContext in finalize() method, not in
dispose() method.

  xxxxx@xxxxx   2000-10-31

I received a confirmation message from the licensee who originally had reported this problem that the problem was not repoducible using a tentative fixed modules on their environment, either.

  xxxxx@xxxxx   2000-11-06

Upon receipt of the above confirmation.  I integrated the workaround (moving ImmDestroyContext call from dispose() to finalize() of the input method instance) into both Ladybird and Merlin.

  xxxxx@xxxxx   2001-01-08

Per requests in JDC comments, I attach the contents of violate33.txt

JAVA éÞâyü[âWêßö»éÊé¸üB
âéâWâàü[âï : IMM32.DLLüAâAâhâîâX : 0167:bfe1200b
Registers:
EAX=00000053 CS=0167 EIP=bfe1200b EFLGS=00010206
EBX=00014744 SS=016f ESP=04f3fc14 EBP=04f3fc34
ECX=81fcc744 DS=016f ESI=00014868 FS=11cf
EDX=00000001 ES=016f EDI=00014744 GS=0000
Bytes at CS:EIP:
8b 00 85 c0 75 04 33 c0 eb 07 50 ff 15 b8 c2 e1 
Stack dump:
72cd113c 00000053 72cd1108 00000053 00014744 72cd10a8 00014744 00000002 00000000 72cec026 00014744 00014744 00000002 004246b8 0000076c 72cf0aa8 

  xxxxx@xxxxx   2002-01-24
Comments
  
  Include a link with my name & email   

Submitted On 25-JUN-2001
nagamasa
I want to read content of violate33.txt.


Submitted On 23-JAN-2002
Jun-ichiA
adachi@ses.co.jp
I want to read content of violate33.txt and want to see win98-crash.jpg



PLEASE NOTE: JDK6 is formerly known as Project Mustang