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

Reply via email to