X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust-java-agent%2Fjava%2Flttng-ust-agent-common%2Forg%2Flttng%2Fust%2Fagent%2Fcontext%2FContextInfoManager.java;h=22efe022e794c3b1930570f560df5b408567ea2a;hb=c0c0989ab70574e09b2f7e8b48c2da6af664a849;hp=86ded59b346ab6984ca4594826d4d9f5716cb5d4;hpb=cad6b749231be8c91fcfd3616934032b5dfd3614;p=lttng-ust.git diff --git a/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java b/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java index 86ded59b..22efe022 100644 --- a/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java +++ b/liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/context/ContextInfoManager.java @@ -1,18 +1,8 @@ /* - * Copyright (C) 2015 - EfficiOS Inc., Alexandre Montplaisir + * SPDX-License-Identifier: LGPL-2.1-only * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License, version 2.1 only, - * as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Copyright (C) 2015 EfficiOS Inc. + * Copyright (C) 2015 Alexandre Montplaisir */ package org.lttng.ust.agent.context; @@ -40,6 +30,10 @@ public final class ContextInfoManager { private final Map contextInfoRetrievers = new ConcurrentHashMap(); private final Map contextInforRetrieverRefs = new HashMap(); + /** + * Lock used to keep the two maps above in sync when retrievers are + * registered or unregistered. + */ private final Object retrieverLock = new Object(); /** Singleton class, constructor should not be accessed directly */ @@ -163,6 +157,13 @@ public final class ContextInfoManager { * was none */ public IContextInfoRetriever getContextInfoRetriever(String retrieverName) { + /* + * Note that this method does not take the retrieverLock, it lets + * concurrent threads access the ConcurrentHashMap directly. + * + * It's fine for a get() to happen during a registration or + * unregistration, it's first-come-first-serve. + */ return contextInfoRetrievers.get(retrieverName); }