src/share/classes/sun/awt/AppContext.java

Print this page

        

*** 836,860 **** return (ac == null) ? true : ac.isDisposed(); } public boolean isMainAppContext() { return (numAppContexts.get() == 1 && mainAppContext != null); } ! public Object getContext() { ! return getAppContext(); ! } ! public Object getExecutionContext() { ! return getExecutionAppContext(); ! } ! public Object get(Object context, Object key) { ! return ((AppContext)context).get(key); ! } ! public void put(Object context, Object key, Object value) { ! ((AppContext)context).put(key, value); } ! public void remove(Object context, Object key) { ! ((AppContext)context).remove(key); } }); } } final class MostRecentKeyValue { --- 836,898 ---- return (ac == null) ? true : ac.isDisposed(); } public boolean isMainAppContext() { return (numAppContexts.get() == 1 && mainAppContext != null); } ! ! /** ! * Returns the AppContext used for applet logging isolation, or null if ! * the default global context can be used. ! * If there's no applet, or if the caller is a stand alone application, ! * or running in the main app context, returns null. ! * Otherwise, returns the AppContext of the calling applet. ! * @return null if the global default context can be used, ! * an AppContext otherwise. ! **/ ! public Object getAppletContext() { ! // There's no AppContext: return null. ! // No need to call getAppContext() if numAppContext == 0: ! // it means that no AppContext has been created yet, and ! // we don't want to trigger the creation of a main app ! // context since we don't need it. ! if (numAppContexts.get() == 0) return null; ! ! // Get the context from the security manager ! AppContext ecx = getExecutionAppContext(); ! ! // Not sure we really need to re-check numAppContexts here. ! // If all applets have gone away then we could have a ! // numAppContexts coming back to 0. So we recheck ! // it here because we don't want to trigger the ! // creation of a main AppContext in that case. ! // This is probably not 100% MT-safe but should reduce ! // the window of opportunity in which that issue could ! // happen. ! if (numAppContexts.get() > 0) { ! // Defaults to thread group caching. ! // This is probably not required as we only really need ! // isolation in a deployed applet environment, in which ! // case ecx will not be null when we reach here ! // However it helps emulate the deployed environment, ! // in tests for instance. ! ecx = ecx != null ? ecx : getAppContext(); } ! ! // getAppletContext() may be called when initializing the main ! // app context - in which case mainAppContext will still be ! // null. To work around this issue we simply use ! // AppContext.threadGroup.getParent() == null instead, since ! // mainAppContext is the only AppContext which should have ! // the root TG as its thread group. ! // See: JDK-8023258 ! final boolean isMainAppContext = ecx == null ! || mainAppContext == ecx ! || mainAppContext == null && ecx.threadGroup.getParent() == null; ! ! return isMainAppContext ? null : ecx; } + }); } } final class MostRecentKeyValue {