From 9120b57b4f092858f76ab631ec81178960a59580 Mon Sep 17 00:00:00 2001 From: Dustin Johnson Date: Wed, 1 May 2013 15:48:15 -0500 Subject: [PATCH] Issue #1968 Prevent deadlock on thinclient startup Change-Id: I522082d3c633b583e9b72941ec17464731ceba5e Former-commit-id: a4f5efb30e0dd9a0bb96dcb73b11974d42a7187a [formerly 7ba78637408e965317e036a3b39e941b8eb8537e] [formerly ff6220147b5fc0f24555d8a5240c5a5b1284d064] [formerly a4f5efb30e0dd9a0bb96dcb73b11974d42a7187a [formerly 7ba78637408e965317e036a3b39e941b8eb8537e] [formerly ff6220147b5fc0f24555d8a5240c5a5b1284d064] [formerly dbd1f3d5e57a509b30c8023a5b7bc6818ba39d61 [formerly ff6220147b5fc0f24555d8a5240c5a5b1284d064 [formerly fd9305775d1c0de574d1c0c9b47aac911b356de6]]]] Former-commit-id: dbd1f3d5e57a509b30c8023a5b7bc6818ba39d61 Former-commit-id: f8f1904c753be919e51c1e21fc287e6226bc5b16 [formerly d9de37190d10d30ee0f70a1ab31a306bda19d9ce] [formerly 4a1c19cd5ef49ce5844d32126a91ca862df4d3ad [formerly 0929802c011243a53e2737cb24228dd046a98cf1]] Former-commit-id: 4a884adba09890a691d502ceddc27714db33590c [formerly 17be4bbb7786a014d92546341cd185d119421cbf] Former-commit-id: 6dd7964b7d50086e67fbf50575932b98a1b6a197 --- .../uf/common/serialization/SerializationUtil.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/SerializationUtil.java b/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/SerializationUtil.java index 6ad5128f26..0bb2b5a017 100644 --- a/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/SerializationUtil.java +++ b/edexOsgi/com.raytheon.uf.common.serialization/src/com/raytheon/uf/common/serialization/SerializationUtil.java @@ -45,6 +45,7 @@ import com.raytheon.uf.common.util.ServiceLoaderUtil; * to accept class parameter, deprecate old versions. Improve performance * of getJaxbManager(). * Feb 07, 2013 1543 djohnson Use ServiceLoader to find how to load jaxbable classes, defaulting to SerializableManager. + * May 01, 2013 1968 djohnson Prevent deadlock due to SerializableManager threads needing to serialize things. * * * @@ -54,10 +55,6 @@ import com.raytheon.uf.common.util.ServiceLoaderUtil; public final class SerializationUtil { - private static final IJaxbableClassesLocator jaxbableClassesLocator = ServiceLoaderUtil - .load(IJaxbableClassesLocator.class, - SerializableManager.getInstance()); - private static volatile JAXBManager jaxbManager; private SerializationUtil() { @@ -79,7 +76,12 @@ public final class SerializationUtil { synchronized (SerializationUtil.class) { result = jaxbManager; if (result == null) { - List> jaxbClasses = jaxbableClassesLocator + // This cannot be eagerly created as + // SerializableManager.getInstance() spawns threads which + // were causing a deadlock + List> jaxbClasses = ServiceLoaderUtil + .load(IJaxbableClassesLocator.class, + SerializableManager.getInstance()) .getJaxbables(); jaxbManager = result = new JAXBManager( jaxbClasses.toArray(new Class[jaxbClasses.size()]));