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