<AWT Dev> [OpenJDK 2D-Dev] [8] Review request for 8005607: Recursion in J2DXErrHandler() Causes a Stack Overflow on Linux

Phil Race philip.race at oracle.com
Wed Mar 27 15:34:17 PDT 2013


Hello,

On 3/27/2013 3:08 PM, Anton Litvinov wrote:
> Hello Phil,
>
> Thank you very much for the review. No, the original problem consists 
> in the fact that Xlib function "XSetErrorHandler" is not thread-safe, 
> so calling it from different threads by setting one error handler and 
> restoring the previous error handler leads to 

I get that. The MT case is just the mechanism for what I described, 
because the install/restore
was wrapping the code that needed the special handler.


> such not easily reproducible bugs like this and the already fixed 
> 6678385, for example when the second thread restores error handler set 
> by the first thread after the first thread left the code block 
> potentially generating XError and already unset its error handler. The 
> only solution to this problem is introduction of one critical section 
> for all pairs of calls to "XSetErrorHandler" function through 
> WITH_XERROR_HANDLER, RESTORE_XERROR_HANDLER macros in the code of JDK. 
> Even this solution is not complete, because JDK's code cannot 
> influence invoked by it code from the third-party libraries, which 
> also sets or potentially sets own error handlers. The purpose of the 
> fix for "6678385" bug was to guarantee that AWT code sets its global 
> error handler once and for the whole life time of Java application and 
> allows Java code to set "synthetic" or not real error handlers without 
> invocation of "XSetErrorHandler" function. While the idea of this fix 
> is to guarantee that there is no place in JDK other than 
> "src/solaris/native/sun/xawt/XlibWrapper.c", where "XSetErrorHandler" 
> function is called. So this fix substitutes real calls to that native 
> function for setting of "synthetic" error handlers through 
> "sun.awt.X11.XErrorHandlerUtil" class.

Except  that 6678385 apparently didn't include the two 2D handlers ? 
Just the XAWT ones.

>
> Yes, this pattern follows a policy relying on the assumption that no 
> other code has a "more important" need to have its X error handler 
> installed, but with one correction which is "no other code in JDK". So 
> this constraint is not applicable to a code of any third-party 
> library, since it is impossible without collaboration between JDK and 
> third parties on definition of common critical section. Unfortunately, 
> I did not know about the opportunity of embedding Java application 
> into another application.

Isn't that exactly what the SWT /AWT bridge is, which is what started 
off 6678385 ?
Fortunately that doesn't seem to rely on this behaviour and in fact 
needed 667838.
But I also wonder about embedding AWT into FX too ..

So I don't know of actual problems for specific apps,  but it seems 
theoretically possible.
If this was already policy for XAWT we likely have this issue anyway so 
I suppose we
just go with this approach until its proven to be a problem.

>
> I also do not know the point of saved_error_handler variable, it 
> became unusable with the fix for the bug "6678385", but this seems to 
> be a stable code which I just had to move from XToolkit class to 
> XErrorHandlerUtil without any modification.

So maybe remove it ? Ask the AWT folks what they think.

>
> AWT_LOCK/AWT_UNLOCK code was added to guarantee that no other thread 
> from JDK code both Java and native can set and unset synthetic error 
> handlers simultaneously. This is the critical section, which I 
> described in my first passage of this e-mail.

That didn't completely answer the point. It wasn't needed before, so did 
you see a real problem ?
It looked to me like we only get here if we have the AWT_LOCK anyway, 
but I didn't exhaustively trace.

-phil.

>
> Thank you,
> Anton
>
> On 3/27/2013 12:12 AM, Phil Race wrote:
>> If I correctly understand the original problem it was that
>> the restoration of an X Error Handler was expected to be
>> to the original one installed by the XToolkit but there is
>> no guarantee of that, so the essence of this fix is
>> that we install our error handlers as we need them but
>> then RESTORE_XERROR_HANDLER() is a bit of a misnomer since
>> it really leaves the handler installed (as far as X11 is concerned)
>> and in the Java code simply discardscurrent_error_handler.
>> Then if an error occurs the Java code will fall through to
>> SAVED_XERROR_HANDLER() which just ignores it.
>>
>> I suppose this policy relies on the assumption that no other
>> code has a "more important" need to have its X error handler
>> installed, so we have no obligation to restore it after we are done.
>> I wonder if this is the right thing to do if we are embedded in 
>> another application.
>>
>> And I am not sure what the point is of saved_error_handler
>> in XErrorHandlerUtil.java since you never use it.
>>
>>
>> 561 JNIEnv* env = (JNIEnv*)JNU_GetEnv(jvm, JNI_VERSION_1_2);
>> 562 AWT_LOCK();
>> 563 jboolean xShmAttachResult = TryXShmAttach(env, awt_display, 
>> shminfo);
>> 564 AWT_UNLOCK();
>>
>> embedding these declarations in the middle of the function
>> may trigger a C compiler warning or error depending on the compiler.
>> Best to move the declarations. Same in the other file.
>>
>> I'm curious, why did you add the AWT_LOCK/AWT_UNLOCK which was not 
>> there before?
>> It may have been considered 'harmless' even if we already have the 
>> lock on this thread and its
>> a Reentrant lock but it does increase the risk of deadlock, plus its 
>> got JNI up-call overhead ..
>> but we seem to have a ton of that anyway.
>>
>> -phil.
>>
>> On 3/26/2013 5:40 AM, Anton Litvinov wrote:
>>> Hello,
>>>
>>> Please review the following fix for a bug. The fix passed 3 cycles 
>>> of review by AWT development team. Artem Ananiev and Anthony Petrov 
>>> approved it. But because the fix modifies also Java 2D Graphics 
>>> code, review by 2D Graphics development team is necessary. New 
>>> "webrev.04" was generated to resolve problem in not smooth patching 
>>> of the latest version of the file 
>>> "src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c".
>>>
>>> Bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8005607
>>> Webrev: http://cr.openjdk.java.net/~alitvinov/8005607/webrev.04
>>>
>>> Thank you,
>>> Anton
>>>
>>> On 2/20/2013 5:43 PM, Artem Ananiev wrote:
>>>>
>>>> Looks fine.
>>>>
>>>> Thanks,
>>>>
>>>> Artem
>>>>
>>>> On 2/18/2013 8:08 PM, Anton Litvinov wrote:
>>>>> Hello Artem,
>>>>>
>>>>> Could you please review a new version of the fix. The method
>>>>> "XErrorHandlerUtil.getDisplay()" was removed and
>>>>> "XErrorHandlerUtil.XSync()" method refers to the field "display"
>>>>> directly now.
>>>>>
>>>>> Webrev: http://cr.openjdk.java.net/~alitvinov/8005607/webrev.03
>>>>>
>>>>> Thank you,
>>>>> Anton
>>>>>
>>>>> On 2/18/2013 4:23 PM, Artem Ananiev wrote:
>>>>>>
>>>>>> On 2/18/2013 4:04 PM, Anton Litvinov wrote:
>>>>>>> Hello Artem,
>>>>>>>
>>>>>>> Thank you very much for the review of this fix. My responses to 
>>>>>>> your
>>>>>>> questions are provided below in the same order, which you defined.
>>>>>>>
>>>>>>>  1. I think that "XErrorHandlerUtil.saved_error" field can 
>>>>>>> surely be
>>>>>>>     marked as private, but in this case the corresponding
>>>>>>>     "XErrorHandlerUtil.getSavedError" method will be necessary, 
>>>>>>> because
>>>>>>>     this field is actively accessed from other classes which set a
>>>>>>>     certain instance of XErrorHandler. For example
>>>>>>>     "MotifDnDDropTargetProtocol.java", 
>>>>>>> "XDragSourceProtocol.java" and a
>>>>>>>     few other classes edited in this fix.
>>>>>>
>>>>>> OK, I missed that usages when looking at the webrev. Let it stay
>>>>>> unchanged now.
>>>>>>
>>>>>>>  2. Yes, I completely agree that 
>>>>>>> "XErrorHandlerUtil.getDisplay()" is
>>>>>>>     reduntant. This method will be eliminated.
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Artem
>>>>>>
>>>>>>> Thank you,
>>>>>>> Anton
>>>>>>>
>>>>>>> On 2/18/2013 3:16 PM, Artem Ananiev wrote:
>>>>>>>> Hi, Anton,
>>>>>>>>
>>>>>>>> a few minor comments:
>>>>>>>>
>>>>>>>> 1. XErrorHandlerUtil: can saved_error be private instead of 
>>>>>>>> package
>>>>>>>> protected?
>>>>>>>>
>>>>>>>> 2. XErrorHandlerUtil.getDisplay() seems to be redundant.
>>>>>>>>
>>>>>>>> In general, the fix looks perfectly fine to me. Please, wait for
>>>>>>>> comments from Java2D team, though.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Artem
>>>>>>>>
>>>>>>>> On 2/13/2013 8:57 PM, Anton Litvinov wrote:
>>>>>>>>> Hello Anthony,
>>>>>>>>>
>>>>>>>>> Could you please review the third version of the fix containing
>>>>>>>>> modifications discussed with you in the previous letter.
>>>>>>>>>
>>>>>>>>> Webrev: http://cr.openjdk.java.net/~alitvinov/8005607/webrev.02
>>>>>>>>>
>>>>>>>>> This version of the fix differs from the previous in the 
>>>>>>>>> following
>>>>>>>>> places:
>>>>>>>>>
>>>>>>>>>  1. A comment about the place of invocation of the method
>>>>>>>>>     "XErrorHandlerUtil.init" was added to a documentation 
>>>>>>>>> block of the
>>>>>>>>>     method.
>>>>>>>>>  2. A code related to XShmAttach function common to the files
>>>>>>>>>     "src/solaris/native/sun/awt/awt_GraphicsEnv.c" and
>>>>>>>>> "src/solaris/native/sun/java2d/x11/X11SurfaceData.c" was 
>>>>>>>>> extracted
>>>>>>>>>     into a separate function "TryXShmAttach" declared in
>>>>>>>>>     "src/solaris/native/sun/awt/awt_GraphicsEnv.h" file.
>>>>>>>>>  3. All JNI code related to X error handling was implemented as
>>>>>>>>>     corresponding macros defined in
>>>>>>>>>     "src/solaris/native/sun/awt/awt_util.h" file.
>>>>>>>>>
>>>>>>>>> Thank you,
>>>>>>>>> Anton
>>>>>>>>>
>>>>>>>>> On 1/31/2013 7:42 PM, Anton Litvinov wrote:
>>>>>>>>>> Hello Anthony,
>>>>>>>>>>
>>>>>>>>>> Thank you for the review and these remarks. Surely, the 
>>>>>>>>>> comment will
>>>>>>>>>> be added. I think that all JNI code related to XShmAttach can be
>>>>>>>>>> definitely transferred into a separate dedicated function, 
>>>>>>>>>> which will
>>>>>>>>>> be declared in "src/solaris/native/sun/awt/awt_GraphicsEnv.h" 
>>>>>>>>>> file. I
>>>>>>>>>> will try to wrap all JNU calls connected with XErrorHandler 
>>>>>>>>>> into the
>>>>>>>>>> particular "WITH_XERROR_HANDLER", "RESTORE_XERROR_HANDLER" 
>>>>>>>>>> functions
>>>>>>>>>> or macros.
>>>>>>>>>>
>>>>>>>>>> Thank you,
>>>>>>>>>> Anton
>>>>>>>>>>
>>>>>>>>>> On 1/31/2013 4:57 PM, Anthony Petrov wrote:
>>>>>>>>>>> Hi Anton,
>>>>>>>>>>>
>>>>>>>>>>> A couple comments:
>>>>>>>>>>>
>>>>>>>>>>> 1. src/solaris/classes/sun/awt/X11/XErrorHandlerUtil.java
>>>>>>>>>>>>   80     private static void init(long display) {
>>>>>>>>>>>
>>>>>>>>>>> This method is private and isn't called from anywhere in 
>>>>>>>>>>> this class
>>>>>>>>>>> itself. This looks confusing. Please add a comment stating 
>>>>>>>>>>> that this
>>>>>>>>>>> method is invoked from native code, and from where exactly.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> 2. Interesting that we use this machinery to call the 
>>>>>>>>>>> XShmAttach()
>>>>>>>>>>> from native code twice, and the code looks quite similar in 
>>>>>>>>>>> each
>>>>>>>>>>> case. Would it be possible to extract the common code in a 
>>>>>>>>>>> separate
>>>>>>>>>>> function (a-la BOOL TryXShmAttach(...)) to avoid code 
>>>>>>>>>>> replication?
>>>>>>>>>>> There are other usages as well, so we could also introduce a 
>>>>>>>>>>> macro
>>>>>>>>>>> (such as the old EXEC_WITH_XERROR_HANDLER but now with other
>>>>>>>>>>> arguments) that would minimize all the JNU_ calls required 
>>>>>>>>>>> to use
>>>>>>>>>>> this machinery.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Otherwise the fix looks great.
>>>>>>>>>>>
>>>>>>>>>>> -- 
>>>>>>>>>>> best regards,
>>>>>>>>>>> Anthony
>>>>>>>>>>>
>>>>>>>>>>> On 1/30/2013 20:14, Anton Litvinov wrote:
>>>>>>>>>>>>   Hello Anthony,
>>>>>>>>>>>>
>>>>>>>>>>>> Could you, please, review a second version of the fix, 
>>>>>>>>>>>> which is
>>>>>>>>>>>> based on an idea of reusing the existing AWT native global 
>>>>>>>>>>>> error
>>>>>>>>>>>> handler from Java 2D native code.
>>>>>>>>>>>>
>>>>>>>>>>>> Webrev: 
>>>>>>>>>>>> http://cr.openjdk.java.net/~alitvinov/8005607/webrev.01
>>>>>>>>>>>>
>>>>>>>>>>>> The fix consists of the following parts:
>>>>>>>>>>>>
>>>>>>>>>>>>    1. Migration of all X error handling code from XToolkit 
>>>>>>>>>>>> to a new
>>>>>>>>>>>>       XErrorHandlerUtil class for resolution of 
>>>>>>>>>>>> interdependency
>>>>>>>>>>>> between
>>>>>>>>>>>>       a static initialization block of XToolkit and a block
>>>>>>>>>>>> initializing
>>>>>>>>>>>>       java.awt.GraphicsEnvironment singleton. Such 
>>>>>>>>>>>> dependency is
>>>>>>>>>>>> created
>>>>>>>>>>>>       by new calls to XToolkit static methods from
>>>>>>>>>>>> "src/solaris/native/sun/awt/awt_GraphicsEnv.c",
>>>>>>>>>>>> "src/solaris/native/sun/java2d/x11/X11SurfaceData.c" files.
>>>>>>>>>>>>    2. Substitution of XToolkit.WITH_XERROR_HANDLER,
>>>>>>>>>>>>       XToolkit.RESTORE_XERROR_HANDLER ... for corresponding
>>>>>>>>>>>> methods,
>>>>>>>>>>>>       fields of XErrorHandlerUtil class in all places of 
>>>>>>>>>>>> JDK source
>>>>>>>>>>>>       code, where they were used.
>>>>>>>>>>>>    3. Substitution of all found native X error handlers 
>>>>>>>>>>>> which are
>>>>>>>>>>>> set in
>>>>>>>>>>>>       native code (awt_GraphicsEnv.c, X11SurfaceData.c,
>>>>>>>>>>>>       GLXSurfaceData.c) for new synthetic Java error handlers.
>>>>>>>>>>>>    4. Removal of X error handling code used by the native 
>>>>>>>>>>>> error
>>>>>>>>>>>> handlers
>>>>>>>>>>>>       from "solaris/native/sun/awt/awt_util.c"
>>>>>>>>>>>>       "solaris/native/sun/awt/awt_util.h" files.
>>>>>>>>>>>>
>>>>>>>>>>>> Thank you,
>>>>>>>>>>>> Anton
>>>>>>>>>>>>
>>>>>>>>>>>> On 1/11/2013 3:45 PM, Anthony Petrov wrote:
>>>>>>>>>>>>> I'm not Jim, but as I indicated earlier my opinion is that 
>>>>>>>>>>>>> the
>>>>>>>>>>>>> easiest way to fix this is to install the existing
>>>>>>>>>>>>> J2DXErrHandler()
>>>>>>>>>>>>> only once. That is, it is the second option listed by you. Of
>>>>>>>>>>>>> course, the J2DXErrHandler needs to be updated as well to 
>>>>>>>>>>>>> detect
>>>>>>>>>>>>> whether 2D code wants to use it at the moment or it must 
>>>>>>>>>>>>> simply
>>>>>>>>>>>>> delegate to the previous handler (i.e. where the code 
>>>>>>>>>>>>> currently
>>>>>>>>>>>>> installs/uninstalls the handler, it must instead set a global
>>>>>>>>>>>>> boolean flag or something.)
>>>>>>>>>>>>>
>>>>>>>>>>>>> While the first option (reusing the existing AWT 
>>>>>>>>>>>>> machinery) is an
>>>>>>>>>>>>> interesting idea in general, I think it is complex and would
>>>>>>>>>>>>> require too much additional testing and bring an 
>>>>>>>>>>>>> unjustified risk
>>>>>>>>>>>>> to the solution for such a basic problem.
>>>>>>>>>>>>>
>>>>>>>>>>>>> -- 
>>>>>>>>>>>>> best regards,
>>>>>>>>>>>>> Anthony
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 1/11/2013 14:44, Anton Litvinov wrote:
>>>>>>>>>>>>>> Hello Jim,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thank you very much for the review and provision of a new 
>>>>>>>>>>>>>> idea of
>>>>>>>>>>>>>> a solution. Elimination of the logic, which sets/unsets
>>>>>>>>>>>>>> J2DXErrHandler() for each call "XShmAttach(awt_display,
>>>>>>>>>>>>>> &shminfo))" should effectively resolve the issue, but 
>>>>>>>>>>>>>> only in
>>>>>>>>>>>>>> case
>>>>>>>>>>>>>> if all other native error handlers, which were set by the 
>>>>>>>>>>>>>> system
>>>>>>>>>>>>>> function "XSetErrorHandler()" in JDK or in any external 
>>>>>>>>>>>>>> library,
>>>>>>>>>>>>>> observe the rule of relaying of all events, which are not
>>>>>>>>>>>>>> relative
>>>>>>>>>>>>>> to them, to the previously saved error handlers. 
>>>>>>>>>>>>>> Otherwise an
>>>>>>>>>>>>>> error generated during "XShmAttach" function call will 
>>>>>>>>>>>>>> not be
>>>>>>>>>>>>>> handled by J2DXErrHandler().
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Could you answer the following question. By setting
>>>>>>>>>>>>>> J2DXErrHandler() only once and forever do you mean usage 
>>>>>>>>>>>>>> of AWT
>>>>>>>>>>>>>> global event handler "static int 
>>>>>>>>>>>>>> ToolkitErrorHandler(Display *
>>>>>>>>>>>>>> dpy, XErrorEvent * event)" from
>>>>>>>>>>>>>> "src/solaris/native/sun/xawt/XlibWrapper.c" with Java 
>>>>>>>>>>>>>> synthetic
>>>>>>>>>>>>>> handlers or creation of another global native error 
>>>>>>>>>>>>>> handler with
>>>>>>>>>>>>>> J2DXErrHandler as native synthetic handler?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thank you,
>>>>>>>>>>>>>> Anton
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 1/10/2013 5:44 AM, Jim Graham wrote:
>>>>>>>>>>>>>>> I think I'd rather see some way to prevent double-adding 
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> handler in the first place as well. Since it is only 
>>>>>>>>>>>>>>> ever used
>>>>>>>>>>>>>>> on errors I also think it is OK to set it once and leave it
>>>>>>>>>>>>>>> there
>>>>>>>>>>>>>>> forever...
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>             ...jim
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On 1/9/13 8:08 AM, Anthony Petrov wrote:
>>>>>>>>>>>>>>>> Hi Anton et al.,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> If I read the description of the bug correctly, 
>>>>>>>>>>>>>>>> specifically
>>>>>>>>>>>>>>>> this part:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The problem occurs, if another thread (for example, GTK
>>>>>>>>>>>>>>>>> thread) is
>>>>>>>>>>>>>>>>> doing the same sort of thing concurrently. This can 
>>>>>>>>>>>>>>>>> lead to
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> following situation.
>>>>>>>>>>>>>>>>>  JVM thread: Sets J2DXErrHandler(), saves
>>>>>>>>>>>>>>>>> ANY_PREVIOUS_HANDLER as
>>>>>>>>>>>>>>>>> previous      GTK thread: Sets some GTK_HANDLER, saves
>>>>>>>>>>>>>>>>> J2DXErrHandler() as previous  JVM thread: Restores
>>>>>>>>>>>>>>>>> ANY_PREVIOUS_HANDLER      GTK thread: Restores
>>>>>>>>>>>>>>>>> J2DXErrHandler()  JVM
>>>>>>>>>>>>>>>>> thread: Sets J2DXErrHandler(), saves J2DXErrHandler() as
>>>>>>>>>>>>>>>>> previous
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> It is obvious that at this final step 2D is in an 
>>>>>>>>>>>>>>>> inconsistent
>>>>>>>>>>>>>>>> state. We
>>>>>>>>>>>>>>>> don't expect to replace our own error handler (and it 
>>>>>>>>>>>>>>>> shouldn't
>>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>> been there in the first place).
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I realize that the fix you propose works around this 
>>>>>>>>>>>>>>>> problem.
>>>>>>>>>>>>>>>> But this
>>>>>>>>>>>>>>>> doesn't look like an ideal solution to me.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> BTW, IIRC, in JDK7 (and 6?) we decided to set the 
>>>>>>>>>>>>>>>> actual X11
>>>>>>>>>>>>>>>> error
>>>>>>>>>>>>>>>> handler only once and never replace it. All the rest of 
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> push_handler/pop_handler logic is now located in Java 
>>>>>>>>>>>>>>>> code (see
>>>>>>>>>>>>>>>> XToolkit.SAVED_ERROR_HANDLER() and the surrounding 
>>>>>>>>>>>>>>>> logic). I
>>>>>>>>>>>>>>>> believe
>>>>>>>>>>>>>>>> that we should somehow share this machinery with the 2D 
>>>>>>>>>>>>>>>> code to
>>>>>>>>>>>>>>>> avoid
>>>>>>>>>>>>>>>> this sort of problems. Though I'm not sure if this will
>>>>>>>>>>>>>>>> eliminate this
>>>>>>>>>>>>>>>> exact issue.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2D/AWT folks: any other thoughts?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> -- 
>>>>>>>>>>>>>>>> best regards,
>>>>>>>>>>>>>>>> Anthony
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 12/29/2012 17:44, Anton Litvinov wrote:
>>>>>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Please review the following fix for a bug.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Bug:
>>>>>>>>>>>>>>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8005607 
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> https://jbs.oracle.com/bugs/browse/JDK-8005607
>>>>>>>>>>>>>>>>> Webrev:
>>>>>>>>>>>>>>>>> http://cr.openjdk.java.net/~alitvinov/8005607/webrev.00
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The bug consists in a crash which is caused by a stack
>>>>>>>>>>>>>>>>> overflow
>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>> the reason of an infinite recursion in AWT native 
>>>>>>>>>>>>>>>>> function
>>>>>>>>>>>>>>>>> J2DXErrHandler() under certain circumstances on 32-bit 
>>>>>>>>>>>>>>>>> Linux
>>>>>>>>>>>>>>>>> OS. The
>>>>>>>>>>>>>>>>> fix is based on introduction of the logic, which detects
>>>>>>>>>>>>>>>>> indirect
>>>>>>>>>>>>>>>>> recursive calls to J2DXErrHandler() by means of a simple
>>>>>>>>>>>>>>>>> counter, to
>>>>>>>>>>>>>>>>> J2DXErrHandler() native function. Such a solution 
>>>>>>>>>>>>>>>>> requires
>>>>>>>>>>>>>>>>> minimum
>>>>>>>>>>>>>>>>> code changes, does not alter the handler's code 
>>>>>>>>>>>>>>>>> significantly
>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>> eliminates this bug.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Adding 2d-dev at openjdk.java.net e-mail alias to the 
>>>>>>>>>>>>>>>>> list of
>>>>>>>>>>>>>>>>> recipients
>>>>>>>>>>>>>>>>> of this letter, because the edited function's name is 
>>>>>>>>>>>>>>>>> related
>>>>>>>>>>>>>>>>> to Java
>>>>>>>>>>>>>>>>> 2D area of JDK, despite of the fact that the edited 
>>>>>>>>>>>>>>>>> file is
>>>>>>>>>>>>>>>>> located in
>>>>>>>>>>>>>>>>> AWT directory.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thank you,
>>>>>>>>>>>>>>>>> Anton
>>>>>>>>>
>>>>>>>
>>>>>
>>>
>>
>




More information about the awt-dev mailing list