Hello GeoTools Developers,

recently we had some problems from within uDig with CRS.decode() and
another call on CRS.getAuthorityFactory()

The version we use at the moment of writing is 2.6.3 (with uDig 1.2) and I
compared the code of CRS class with the current on master, where decode
isn't synchronized whereas other methods are synchronized. For me it looks
like a lock LongitudeFirstFactoryfrom worker thread causes the deadlock on
another thread (see ThreadDump down below)

What do you think about synchronizing CRS.decode() as well? do you expect
any performance issues or other side effects? What would you suggest to fix
this problem on master?

In addition I saw a comment in ReferencingFactoryContainer regarding
reducing locks which might be related : Line 149
<https://github.com/geotools/geotools/blob/master/modules/library/referencing/src/main/java/org/geotools/referencing/factory/ReferencingFactoryContainer.java#L149>

Many Thanks in advance
--
Frank

java.lang.Thread.State: BLOCKED (on object monitor)

        *at 
org.geotools.referencing.factory.ReferencingFactoryContainer.instance(ReferencingFactoryContainer.java:163)*

*        - waiting to lock **<0x00000005d089eee8>** (a java.lang.Class
for org.geotools.referencing.ReferencingFactoryFinder)*

*        at 
org.geotools.referencing.factory.DirectAuthorityFactory.(DirectAuthorityFactory.java:90)*

        at 
org.geotools.referencing.factory.epsg.DirectEpsgFactory.(DirectEpsgFactory.java:454)

        at 
org.geotools.referencing.factory.epsg.DirectEpsgFactory.(DirectEpsgFactory.java:444)

        at 
org.geotools.referencing.factory.epsg.FactoryUsingSQL.(FactoryUsingSQL.java:49)

        at 
org.geotools.referencing.factory.epsg.FactoryUsingAnsiSQL.(FactoryUsingAnsiSQL.java:121)

        at 
org.geotools.referencing.factory.epsg.ThreadedH2EpsgFactory.createBackingStore(ThreadedH2EpsgFactory.java:356)

        at 
org.geotools.referencing.factory.epsg.ThreadedEpsgFactory.createBackingStore0(ThreadedEpsgFactory.java:361)

        at 
org.geotools.referencing.factory.epsg.ThreadedEpsgFactory.createBackingStore(ThreadedEpsgFactory.java:418)

        at 
org.geotools.referencing.factory.DeferredAuthorityFactory.getBackingStore(DeferredAuthorityFactory.java:132)

        at 
org.geotools.referencing.factory.BufferedAuthorityFactory.createCoordinateReferenceSystem(BufferedAuthorityFactory.java:781)

        - locked <0x00000005d160c110> (a
org.geotools.referencing.factory.epsg.ThreadedH2EpsgFactory)

        at 
org.geotools.referencing.factory.AuthorityFactoryAdapter.createCoordinateReferenceSystem(AuthorityFactoryAdapter.java:798)

*        at 
org.geotools.referencing.factory.BufferedAuthorityFactory.createCoordinateReferenceSystem(BufferedAuthorityFactory.java:781)*

*        - locked **<0x00000005d5747968>** (a
org.geotools.referencing.factory.epsg.LongitudeFirstFactory)*

*        at 
org.geotools.referencing.factory.AuthorityFactoryAdapter.createCoordinateReferenceSystem(AuthorityFactoryAdapter.java:798)*

        at 
org.geotools.referencing.factory.ThreadedAuthorityFactory.createCoordinateReferenceSystem(ThreadedAuthorityFactory.java:729)

        - locked <0x00000005d5746ac0> (a
org.geotools.referencing.DefaultAuthorityFactory)

        a*t 
org.geotools.referencing.DefaultAuthorityFactory.createCoordinateReferenceSystem(DefaultAuthorityFactory.java:179)*

*        at org.geotools.referencing.CRS.decode(CRS.java:**435**)*

*        at org.geotools.referencing.CRS.decode(CRS.java:363)*

*        at 
net.refractions.udig.render.internal.wms.basic.BasicWMSMetricsFactory2.getCRS(BasicWMSMetricsFactory2.java:117)*

        - locked <0x000000061447ab00> (a
net.refractions.udig.render.internal.wms.basic.BasicWMSMetricsFactory2)

        at 
net.refractions.udig.render.internal.wms.basic.BasicWMSMetricsFactory2.searchForCRSMatch(BasicWMSMetricsFactory2.java:84)

        at 
net.refractions.udig.render.internal.wms.basic.BasicWMSMetricsFactory2.canRender(BasicWMSMetricsFactory2.java:67)

        at 
net.refractions.udig.project.internal.render.impl.RenderMetricsSorter.canRender(RenderMetricsSorter.java:70)

        at 
net.refractions.udig.project.internal.render.impl.RenderMetricsSorter.compare(RenderMetricsSorter.java:48)

        at 
net.refractions.udig.project.internal.render.impl.RenderMetricsSorter.compare(RenderMetricsSorter.java:1)

        at java.util.TimSort.countRunAndMakeAscending(Unknown Source)

        at java.util.TimSort.sort(Unknown Source)

        at java.util.Arrays.sort(Unknown Source)

        at java.util.concurrent.CopyOnWriteArrayList.sort(Unknown Source)

        at java.util.Collections.sort(Unknown Source)

        at 
net.refractions.udig.project.internal.render.impl.RendererConfigurator.initFactories(RendererConfigurator.java:706)

        at 
net.refractions.udig.project.internal.render.impl.RendererConfigurator.initRenderMetrics(RendererConfigurator.java:334)

        - locked <0x00000005dc0c1578> (a
java.util.Collections$SynchronizedSortedSet)

        at 
net.refractions.udig.project.internal.render.impl.RendererConfigurator.createConfiguration(RendererConfigurator.java:216)

        at 
net.refractions.udig.project.internal.render.impl.RendererConfigurator.getConfiguration(RendererConfigurator.java:718)

        at 
net.refractions.udig.project.ui.internal.NextGenRenderManager.synchronizeRenderers(NextGenRenderManager.java:1059)

        at 
net.refractions.udig.project.ui.internal.NextGenRenderManager.access$0(NextGenRenderManager.java:1034)

        at 
net.refractions.udig.project.ui.internal.NextGenRenderManager$RenderTaskQueueJob.run(NextGenRenderManager.java:242)

        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

   Locked ownable synchronizers:

        - <0x0000000618531f90> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)


java.lang.Thread.State: BLOCKED (on object monitor)

        *at 
org.geotools.referencing.factory.BufferedAuthorityFactory.isAvailable(BufferedAuthorityFactory.java:233)*

*        - waiting to lock **<0x00000005d5747968>** (a
org.geotools.referencing.factory.epsg.LongitudeFirstFactory)*

        at 
org.geotools.referencing.factory.DeferredAuthorityFactory.isAvailable(DeferredAuthorityFactory.java:119)

        at 
org.geotools.factory.FactoryRegistry.isAvailable(FactoryRegistry.java:668)

        at 
org.geotools.factory.FactoryRegistry.isAcceptable(FactoryRegistry.java:500)

        at 
org.geotools.factory.FactoryRegistry$1.filter(FactoryRegistry.java:191)

        at javax.imageio.spi.FilterIterator.advance(Unknown Source)

        at javax.imageio.spi.FilterIterator.(Unknown Source)

        at javax.imageio.spi.ServiceRegistry.getServiceProviders(Unknown Source)

        at 
org.geotools.factory.FactoryRegistry.getServiceProviders(FactoryRegistry.java:196)

        *at 
org.geotools.referencing.ReferencingFactoryFinder.getFactories(ReferencingFactoryFinder.java:176)*

*        - locked **<0x00000005d089eee8>** (a java.lang.Class for
org.geotools.referencing.ReferencingFactoryFinder)*

        at 
org.geotools.referencing.ReferencingFactoryFinder.getCRSAuthorityFactories(ReferencingFactoryFinder.java:451)

        at 
org.geotools.referencing.DefaultAuthorityFactory.getBackingFactory(DefaultAuthorityFactory.java:88)

        at 
org.geotools.referencing.DefaultAuthorityFactory.(DefaultAuthorityFactory.java:69)

        *at org.geotools.referencing.CRS.getAuthorityFactory(CRS.java:197)*

*        - locked **<0x00000005d089f9d8>** (a java.lang.Class for
org.geotools.referencing.CRS)*

*        at org.geotools.referencing.CRS.decode(CRS.java:**435**)*

        at 
net.refractions.udig.tools.internal.CursorPosition.mouseMoved(CursorPosition.java:94)

        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventJob.sendMouseMoved(EventJob.java:283)

        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventJob.runEvent(EventJob.java:91)

        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventJob.fire(EventJob.java:54)

        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventHandler.mouseMove(EventHandler.java:173)

        at 
net.refractions.udig.project.ui.internal.render.displayAdapter.impl.EventHandler.handleEvent(EventHandler.java:40)

        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)

        at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4131)

        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1055)

        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3944)

        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3547)

        at 
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1173)

        at 
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)

        at 
org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1062)

        at 
org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)

        at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)

        at org.eclipse.ui.internal.Workbench$$Lambda$47/193598542.run(Unknown
Source)

        at 
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)

        at 
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:566)

        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
_______________________________________________
GeoTools-Devel mailing list
GeoTools-Devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to