<AWT Dev> Review Request For 8146230: Crash in JNI_ArgumentPusherVaArg::JNI_ArgumentPusherVaArg(_jmethodID*, __va_list_tag*)+0xa

Semyon Sadetsky semyon.sadetsky at oracle.com
Thu Jul 7 13:56:34 UTC 2016



On 07.07.2016 16:14, Ambarish Rapte wrote:
>
> Hi Semyon,
>
> 1. The _initIDs() functions are called from static initialization 
> block of particular class, hence these functions would be called when 
> class is getting loaded.
>
>      The_initIDs() functions are used to initialize the IDs & get 
> value of Java class members only.
>
>                                 For example:
>
> Java_sun_awt_X11_XToolkit_initIDs() initializes IDs and gets value 
> from java side XToolkit class (XToolkit.java)
>
awtJNI_ThreadYield() is only used by the XToolkit. I don't see anything 
bad if it will be initialized there.
>
>                 2.  But awtJNI_ThreadYield()  is late initialization 
> of IDs. IDs are initialized when first thread has to be yield.
>
Is lazy initialization really necessary? It looks like the method ID is 
used always.
>
> ð Addition of operations to Java_sun_awt_X11_XToolkit_initIDs() is 
> addition to class load time.
>
Lock also introduces delay. Also it maybe a source for deadlocks. 
Locking toolkit thread using global lock object should be really justified.
>
> ð XToolkit.c::get_xawt_root_shell() is another example of late 
> initialization of jclass, jmethodID.
>
Should it be fixed as well?

--Semyon
>
> Regards,
>
> Ambarish
>
> *From:*Semyon Sadetsky
> *Sent:* Wednesday, July 06, 2016 11:39 PM
> *To:* Ambarish Rapte; Sergey Bylokhov; Alexander Scherbatiy; Prasanta 
> Sadhukhan; awt-dev at openjdk.java.net
> *Subject:* Re: Review Request For 8146230: Crash in 
> JNI_ArgumentPusherVaArg::JNI_ArgumentPusherVaArg(_jmethodID*, 
> __va_list_tag*)+0xa
>
> Hi Ambarish,
>
> Why not simply initialize yieldMethodID separately? For example in 
> Java_sun_awt_X11_XToolkit_initIDs.
>
> --Semyon
>
> On 06.07.2016 14:23, Ambarish Rapte wrote:
>
>     Hi,
>
>                     Please review the fix for JDK9,
>
>                     Bug: https://bugs.openjdk.java.net/browse/JDK-8146230
>
>                     Webrev:
>     http://cr.openjdk.java.net/~arapte/8146230/webrev.00/
>     <http://cr.openjdk.java.net/%7Earapte/8146230/webrev.00/>
>
>     Issue:
>
>     1.Null pointer exception in JNI
>
>     Cause:
>
>     The code block was not multi thread safe.
>
>     Issue occurs in  multi threaded , multi processor environment.
>
>     Fix:
>
>     1.Changed the variable used for double checking, to use
>     /yieldMethodID ./
>
>     2.Changed /yieldMethodID  to  volatile./
>
>     3.Added AWT_LOCK() over initialize block of code.
>
>     4.Removed unrequired  err variable.
>
>     A drawback of Double Check Locking ( DCL ) is, if the resource
>     assignment is not an atomic operation, The DCL may fail.
>
>     But here in the code of concern, is an atomic operation. Hence DCL
>     should work fine.
>
>     Please check below reference link for more detailed discussion of
>     DCL with C++.
>
>     Verification:
>
>     1.Tested Event tests which pass without any regression of this change.
>
>     2.As this change only corrects existing logic, there should be no
>     side effects.
>
>     Reference:
>
>                     C++ and the Perils of Double-Checked Locking:
>     http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
>
>     Regards,
>
>     Ambarish
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20160707/33dbeda4/attachment.html>


More information about the awt-dev mailing list