X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=swt%2Forg.argeo.app.swt%2Fsrc%2Forg%2Fargeo%2Fapp%2Fswt%2Fux%2FSwtArgeoApp.java;h=505c52d92ebdf52bd65291b30330edff12139fa1;hb=846518809f5f6a2e5c28e851d743ece803d95f6b;hp=e733e8a29626762c6011a789d1a191b359b1fb39;hpb=68ec16197ed4d4e3309d461782bcfc83b160f891;p=gpl%2Fargeo-suite.git diff --git a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java index e733e8a..505c52d 100644 --- a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java +++ b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java @@ -128,9 +128,6 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber // TODO does it make sense to accept that? appPid = ""; } - if (log.isDebugEnabled()) - log.info("Argeo Suite App " + appPid + " started"); - Objects.requireNonNull(contentRepository, "Content repository must be provided"); Objects.requireNonNull(appUserState, "App user state must be provided"); @@ -139,25 +136,41 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber @Override public void run() { - Iterator> uiRefs = managedUis.values().iterator(); - refs: while (uiRefs.hasNext()) { - WeakReference uiRef = uiRefs.next(); - SwtAppUi ui = uiRef.get(); - if (ui == null) { - if (log.isTraceEnabled()) - log.warn("Unreferenced UI in " + appPid + ", removing it"); - uiRefs.remove(); - continue refs; - } - if (!ui.isDisposed() && !ui.getDisplay().isDisposed()) { - ui.getDisplay().asyncExec(() -> ui.disposeIfTimedout()); + try { + Iterator>> uiRefs = managedUis.entrySet().iterator(); + refs: while (uiRefs.hasNext()) { + Map.Entry> entry = uiRefs.next(); + String uiUuid = entry.getKey(); + WeakReference uiRef = entry.getValue(); + SwtAppUi ui = uiRef.get(); + if (ui == null) { + if (log.isTraceEnabled()) + log.warn("Unreferenced UI " + uiUuid + " in " + appPid + ", removing it"); + uiRefs.remove(); + continue refs; + } + if (!ui.isDisposed() && !ui.getDisplay().isDisposed()) { + if (ui.isTimedOut()) { + if (log.isTraceEnabled()) + log.trace("Killing timed-out UI " + uiUuid + " in " + appPid); + UiContext.killDisplay(ui.getDisplay()); + } + } else { + if (log.isTraceEnabled()) + log.warn("Disposed UI " + uiUuid + " still in " + appPid + ", removing it"); + uiRefs.remove(); + } } + if (log.isTraceEnabled()) + log.trace(managedUis.size() + " UIs being managed by app " + appPid); + } catch (Exception e) { + e.printStackTrace(); } - if (log.isTraceEnabled()) - log.trace(managedUis.size() + " UIs being managed by app " + appPid); } }, janitorPeriod, janitorPeriod); + if (log.isDebugEnabled()) + log.info("Argeo Suite App " + appPid + " started"); } public void stop(Map properties) {