IBM Support

PI71844: Deadlock in ICU library - ICUResourceBundle.instantiateBundle

Subscribe

You can track all active APARs for this component.

APAR status

  • Closed as program error.

Error description

  • A hang condition may occur due to a deadlock between two classes
    
       com/ibm/icu/impl/ICUResourceBundle
    and
       com/ibm/icu/util/UResourceBundle
    
    
    This deadlock is caused by misplaced synchronization on the
    static method ICUResourceBundle.instantiateBundle().  The
    synchronization is to protect a static resource in its
    superclass UResourceBundle. UResourceBundle uses static
    synchronized methods to protect the resource.
    
    So the problem is the "synchronized" keyword on the static
    method in the subclass ( ICUResourceBundle.instantiateBundle()
    ) is actually a different lock for the same resource.  It locks
    on ICUResourceBundle.class.  It needs to use the same lock as
    the superclass.
    
    The result is the deadlock:
    
    Thread A - holds lock ICUResourceBundle.class
             - needs lock UResourceBundle.class
    
    Thread B - holds lock UResourceBundle.class
             - needs lock ICUResourceBundle.class
    
    The fix is to remove the "synchronized" on the
    ICUResourceBundle.instantiateBundle() method, and then enclose
    the contents of that method inside a sync block like this:
    
    protected static ... instantiateBundle( ... ) {
        synchronized(UResourceBundle.class) {
           ...
        }
    }
    

Local fix

Problem summary

  • ****************************************************************
    * USERS AFFECTED:  All users of IBM WebSphere Application      *
    *                  Server V7                                   *
    ****************************************************************
    * PROBLEM DESCRIPTION: A thread synchronization problem in     *
    *                      International Components for            *
    *                      Unicode (ICU) library might cause the   *
    *                      application to hang.                    *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    The International Components for Unicode (ICU) for java
    library (version 3.4.5) is included with WebSphere Application
    Server.
    Incorrect coding for synchronization on the static method
    ICUResourceBundle.instantiateBundle() might cause a hang
    condition.  The problem can be diagnosed by taking java core
    dumps.
    The dumps will show a deadlock between two threads, similar to
    the following:
    Dump Event "user" (00004000) received
    Deadlock detected !!!
    ----------
    Thread "WebContainer : 3" (0x0000000003B55200)
    is waiting for:
    com/ibm/icu/impl/ICUResourceBundle@0x0000000012796398/0x00000000
    127963A4:
    which is owned by:
    Thread "WebContainer : 10" (0x00000000041C0500)
    which is waiting for:
    com/ibm/icu/util/UResourceBundle@0x0000000012796370/0x0000000012
    79637C:
    which is owned by:
    Thread "WebContainer : 3" (0x0000000003B55200)
    ----------
    "WebContainer : 3" J9VMThread:0x0000000003B55200,
    Java callstack:
    at
    com/ibm/icu/impl/ICUResourceBundle.getBundleInstance(ICUResource
    Bundle.java:1140)
    at
    com/ibm/icu/util/UResourceBundle.instantiateBundle(UResourceBund
    le.java:498)
    at
    com/ibm/icu/util/UResourceBundle.getBundleInstance(UResourceBund
    le.java:127)
    at
    com/ibm/icu/util/UResourceBundle.getBundleInstance(UResourceBund
    le.java:108)
    at
    com/ibm/icu/util/UResourceBundle.getBundleInstance(UResourceBund
    le.java:195)
    at
    com/ibm/icu/text/RuleBasedCollator.<init>(RuleBasedCollator.java
    :1811)
    at
    com/ibm/icu/text/CollatorServiceShim$CService$1CollatorFactory.h
    andleCreate(CollatorServiceShim.java:114)
    at
    com/ibm/icu/impl/ICULocaleService$LocaleKeyFactory.create(ICULoc
    aleService.java:364)
    at
    com/ibm/icu/impl/ICUService.getKey(ICUService.java:463)
    at
    com/ibm/icu/impl/ICUService.getKey(ICUService.java:383)
    at
    com/ibm/icu/impl/ICULocaleService.get(ICULocaleService.java:72)
    at
    com/ibm/icu/impl/ICULocaleService.get(ICULocaleService.java:56)
    at
    com/ibm/icu/text/CollatorServiceShim.getInstance(CollatorService
    Shim.java:34)
    at
    com/ibm/icu/text/Collator.getInstance(Collator.java:484)
    at
    com/ibm/icu/text/Collator.getInstance(Collator.java:501)
    at
    com/ibm/commerce/bi/taglib/BaseTag.doStartTag(BaseTag.java:93)
    ----------
    "WebContainer : 10" J9VMThread:0x00000000041C0500,
    Java callstack:
    at
    com/ibm/icu/impl/ICUResourceBundle.instantiateBundle(ICUResource
    Bundle.java:1155)
    at
    com/ibm/icu/impl/ICUResourceBundle.getBundleInstance(ICUResource
    Bundle.java:1140)
    at
    com/ibm/icu/impl/ICUResourceBundleImpl.findResource(ICUResourceB
    undleImpl.java:706)
    at
    com/ibm/icu/impl/ICUResourceBundleImpl.createBundleObject(ICURes
    ourceBundleImpl.java:195)
    at
    com/ibm/icu/impl/ICUResourceBundleImpl.access$1300(ICUResourceBu
    ndleImpl.java:29)
    at
    com/ibm/icu/impl/ICUResourceBundleImpl$ResourceTable.handleGet(I
    CUResourceBundleImpl.java:269)
    at
    com/ibm/icu/impl/ICUResourceBundleImpl$ResourceTable.handleGet(I
    CUResourceBundleImpl.java:246)
    at
    com/ibm/icu/impl/ICUResourceBundle.findResourceWithFallback(ICUR
    esourceBundle.java:1105)
    at
    com/ibm/icu/impl/ICUResourceBundle.getWithFallback(ICUResourceBu
    ndle.java:652)
    at
    com/ibm/icu/text/RuleBasedCollator.<init>(RuleBasedCollator.java
    :1824)
    at
    com/ibm/icu/text/CollatorServiceShim$CService$1CollatorFactory.h
    andleCreate(CollatorServiceShim.java:114)
    at
    com/ibm/icu/impl/ICULocaleService$LocaleKeyFactory.create(ICULoc
    aleService.java:364)
    at
    com/ibm/icu/impl/ICUService.getKey(ICUService.java:463)
    at
    com/ibm/icu/impl/ICUService.getKey(ICUService.java:383)
    at
    com/ibm/icu/impl/ICULocaleService.get(ICULocaleService.java:72)
    at
    com/ibm/icu/impl/ICULocaleService.get(ICULocaleService.java:56)
    at
    com/ibm/icu/text/CollatorServiceShim.getInstance(CollatorService
    Shim.java:34)
    at
    com/ibm/icu/text/Collator.getInstance(Collator.java:484)
    at
    com/ibm/icu/text/Collator.getInstance(Collator.java:501)
    at
    com/ibm/commerce/bi/taglib/BaseTag.doStartTag(BaseTag.java:93)
    ----------
    The problem is the static method
    ICUResourceBundle.instantiateBundle() is synchronized using
    the wrong lock.  It should be using the same lock as its
    superclass.
    

Problem conclusion

  • The static method ICUResourceBundle.instantiateBundle() has
    been updated to use the same lock as its superclass.
    
    The fix for this APAR is currently targeted for inclusion in
    fix pack 7.0.0.43.  Please refer to the Recommended Updates
    page for delivery information:
    http://www.ibm.com/support/docview.wss?rs=180&uid=swg27004980
    

Temporary fix

Comments

APAR Information

  • APAR number

    PI71844

  • Reported component name

    WEBS APP SERV N

  • Reported component ID

    5724H8800

  • Reported release

    700

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2016-11-04

  • Closed date

    2016-11-22

  • Last modified date

    2016-11-22

  • APAR is sysrouted FROM one or more of the following:

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    WEBS APP SERV N

  • Fixed component ID

    5724H8800

Applicable component levels

  • R700 PSY

       UP



Document information

More support for: WebSphere Application Server
General

Software version: 7.0

Reference #: PI71844

Modified date: 22 November 2016