|
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.
================================================================
|
|
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
|