|
Evaluation
|
Based on the prevalence of java2d in the stack trace, reassigning to java2d.
xxxxx@xxxxx 2002-11-25
Here's some information from the evaluation of
4720694: java apps crash on Solaris 9 Ultra-80 machine by using 1.4.1
The crash with the stack trace above first appeared in 1.4.2 build 07
(caused by the new code for the Region and Xor changes).
It can be reproduced on Solaris single or multiple cpu machine (i.e,
on my Solaris 8 US60 with disabled DGA), and on Windows.
The problem is not specific to the test case in the description, it can
be seen when running SwingSet2 with -Xcheck:jni as well.
In both cases (windows and solaris) the offending call is
env->IsSameObject(env, clip, [w/x]sdo->lastclip)
in Win32SD_InitDC and X11SD_InitClip respectively.
Looks like the lastclip (which is a global weak reference) is the problem.
Jni reports the same error when I tried to create a new local reference out of
(non-null, btw) lastclip, or when IsSameObject(lastclip, NULL) is called.
It's not clear yet what exactly the vm is complaining about. The lastclip at
the time of the failure contains the correct value, returned by NewWeakGlobalRef
when lastclip was set, so the at least the value of lastclip is not smashed.
When I've replaced WeakGlobalReferences with GlobalReferences, the
problem went away. Since the usage pattern didn't change with this 'fix',
and we use those weak references only for comparison with IsSameObject()
(that is, we don't even get the object from them - only create,
compare and delete), I suspect that this might be a vm issue.
Also note, that the crash reproducible on Solaris and Windows.
Based on this information, I'm reassigning the bug to
vm team. They could close it as a duplicate of 4720694, or
keep it as a holder for GlobalWeakReference issue, because 4720694
initially was about a different problem.
xxxxx@xxxxx 2002-12-04
xxxxx@xxxxx 2002-12-06
With -Xcheck:jni, the validation of arguments for IsSameObject is overly
strict -- NULL objects are rejected (as they would be for any other
JNI call). IsSameObject needs to be a special case.
|