Okay I failed at making a pull request; if I can ask people to test when they next update.
The good news is that I have the catalog restore being called from the UDIGApplication init method (like the EPSG database load) cleanly loading things in the background. -- Jody Garnett On Thursday, 12 July 2012 at 4:02 PM, Jody Garnett wrote: > TLDR: Fixed it, pull request shortly > > Okay cool; I tracked this down to two mistakes and will raise a pull request > shortly. > a) IService.resolve was calling createInfo each time (rather then use getInfo > which caches) > b) The quick label provider used from the display thread was calling > getInfo(), this is why we made the getTitle and getIcon method (which could > check the cached info if available), the slow label decorator will correctly > call getInfo from a background thread later it it was not already available. > -- > Jody Garnett > > > On Thursday, 12 July 2012 at 11:47 AM, Jody Garnett wrote: > > > I have been having bit of fun with a custom IService implementation that > > contains the following check: > > > > if (Display.getCurrent() != null) { > > throw new IllegalStateException( > > "Access to the server not available from the display > > thread"); //$NON-NLS-1$ > > } > > > > > > I have found this *very* helpful for catching code that has a chance of > > blocking the display thread while it waits for IO. > > > > However it has turned up a few instances in uDig where we are incorrectly > > asking for IServiceInfo from the display thread under the assumption > > someone already loaded it. After our next release I would like to put a few > > Display thread checks (such as the above) in order to catch this kind of > > mistake early. > > > > For reference where I get the problem in uDig is here: > > > > at > > net.refractions.udig.catalog.internal.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:241) > > at > > net.refractions.udig.catalog.ServiceParameterPersister.locateService(ServiceParameterPersister.java:241) > > at > > net.refractions.udig.catalog.ServiceParameterPersister.restore(ServiceParameterPersister.java:155) > > at > > net.refractions.udig.catalog.internal.CatalogImpl.loadFromFile(CatalogImpl.java:1015) > > at > > net.refractions.udig.catalog.CatalogPlugin.restoreFromPreferences(CatalogPlugin.java:201) > > at net.refractions.udig.catalog.CatalogPlugin.start(CatalogPlugin.java:106) > > > > > > I am going to think about a fix for that; it could be our habit of asking > > for getInfo to check if the service is any good is: > > a) a bit of a hack > > b) not needed when restoring the catalog no startup > > -- > > Jody Garnett > > >
_______________________________________________ User-friendly Desktop Internet GIS (uDig) http://udig.refractions.net http://lists.refractions.net/mailman/listinfo/udig-devel