Two methods in the BeanContextSupport class use two locks in a different order, which can cause a deadlock.
Here is the first order: (1) first acquire BeanContext.globalHierarchyLock and then children: enter public method remove(Object) at line 484 call remove(Object, boolean) at line 485 acquire synchronization on BeanContext.globalHierarchyLock at line 502 acquire synchronization on children at line 534 Here is the second order: (2) first acquire children and then BeanContext.globalHierarchyLock: enter public method propertyChange() at line 1110 acquire synchronization on children at line 1114 call remove(Object, boolean) at line 1121 acquire synchronization on BeanContext.globalHierarchyLock at line 502 The fix added the "BeanContext.globalHierarchyLock" before the usage of the "children" lock in the propertyChange method. ------------- Commit messages: - Update BeanContextSupport.java - 8238170: BeanContextSupport remove and propertyChange can deadlock Changes: https://git.openjdk.org/jdk/pull/12158/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12158&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8238170 Stats: 158 lines in 3 files changed: 147 ins; 0 del; 11 mod Patch: https://git.openjdk.org/jdk/pull/12158.diff Fetch: git fetch https://git.openjdk.org/jdk pull/12158/head:pull/12158 PR: https://git.openjdk.org/jdk/pull/12158