Mercurial > hg > release > thermostat-0.11
changeset 1125:625f166f74d1
Fix race condition in MainWindowControllerImpl can cause NPE (PR1456)
Reviewed-by: jerboaa
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-May/006901.html
PR1456
author | Jon VanAlten <jon.vanalten@redhat.com> |
---|---|
date | Wed, 29 May 2013 16:55:28 -0600 |
parents | 49f6272156ff |
children | de5f9dc2154c |
files | client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/MainWindowControllerImpl.java |
diffstat | 1 files changed, 15 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/MainWindowControllerImpl.java Fri May 31 12:15:17 2013 -0400 +++ b/client/swing/src/main/java/com/redhat/thermostat/client/swing/internal/MainWindowControllerImpl.java Wed May 29 16:55:28 2013 -0600 @@ -109,6 +109,8 @@ private final CopyOnWriteArrayList<DecoratorProvider<HostRef>> hostTreeDecorators = new CopyOnWriteArrayList<>(); private final CopyOnWriteArrayList<DecoratorProvider<VmRef>> vmTreeDecorators = new CopyOnWriteArrayList<>(); + private final ApplicationInfo appInfo = new ApplicationInfo(); + private ApplicationService appSvc; private Timer backgroundUpdater; @@ -125,8 +127,6 @@ private VmInformationViewProvider vmInfoViewProvider; private AgentInformationViewProvider agentInfoViewProvider; private ClientConfigViewProvider clientConfigViewProvider; - - private ApplicationInfo appInfo; private InformationServiceTracker infoServiceTracker; private HostContextActionServiceTracker hostContextActionTracker; @@ -134,6 +134,7 @@ private MultipleServiceTracker depTracker; private CountDownLatch shutdown; + private CountDownLatch initViewLatch = new CountDownLatch(1); private MenuRegistry menuRegistry; private ActionListener<ThermostatExtensionRegistry.Action> menuListener = @@ -200,6 +201,7 @@ RegistryFactory registryFactory, final CountDownLatch shutdown) { this.appSvc = appSvc; + this.view = view; try { vmFilterRegistry = registryFactory.createVmFilterRegistry(); hostFilterRegistry = registryFactory.createHostFilterRegistry(); @@ -265,13 +267,11 @@ Objects.requireNonNull(agentInfoViewProvider); clientConfigViewProvider = (ClientConfigViewProvider) services.get(ClientConfigViewProvider.class.getName()); Objects.requireNonNull(clientConfigViewProvider); - - initView(view); + + initView(); vmInfoControllerProvider = new VmInformationControllerProvider(); - appInfo = new ApplicationInfo(); - view.setWindowTitle(appInfo.getName()); initializeTimer(); updateView(); @@ -352,9 +352,9 @@ view.updateTree(hostFilters, vmFilters, hostTreeDecorators, vmTreeDecorators, loader); } - private void initView(MainView mainView) { - this.view = mainView; - mainView.addActionListener(new ActionListener<MainView.Action>() { + private void initView() { + view.setWindowTitle(appInfo.getName()); + view.addActionListener(new ActionListener<MainView.Action>() { @Override public void actionPerformed(ActionEvent<MainView.Action> evt) { @@ -401,6 +401,7 @@ } }); + initViewLatch.countDown(); } /* @@ -510,6 +511,11 @@ @Override public void showMainMainWindow() { + try { + initViewLatch.await(); + } catch (InterruptedException e) { + logger.warning("Interrupted while awaiting view initialization."); + } view.showMainWindow(); }