Fix: Return the correct list of available Java events
[deliverable/lttng-ust.git] / liblttng-ust-java-agent / java / lttng-ust-agent-common / org / lttng / ust / agent / AbstractLttngAgent.java
index c3fc339bc628b09234e1ed41962f2197fb221b8f..e97a7bdb222b172b62524fa7245f400287dd3d5b 100644 (file)
@@ -18,9 +18,8 @@
 
 package org.lttng.ust.agent;
 
+import java.util.Collection;
 import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Map;
 import java.util.NavigableMap;
 import java.util.Set;
@@ -30,6 +29,8 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.lttng.ust.agent.client.ILttngTcpClientListener;
 import org.lttng.ust.agent.client.LttngTcpSessiondClient;
+import org.lttng.ust.agent.filter.FilterChangeNotifier;
+import org.lttng.ust.agent.session.EventRule;
 
 /**
  * Base implementation of a {@link ILttngAgent}.
@@ -55,7 +56,7 @@ public abstract class AbstractLttngAgent<T extends ILttngHandler>
         * falls to 0, this means we can avoid sending log events through JNI
         * because nobody wants them.
         *
-        * It uses a concurrent hash set", so that the {@link #isEventEnabled} and
+        * It uses a concurrent hash map, so that the {@link #isEventEnabled} and
         * read methods do not need to take a synchronization lock.
         */
        private final Map<String, Integer> enabledEvents = new ConcurrentHashMap<String, Integer>();
@@ -189,12 +190,16 @@ public abstract class AbstractLttngAgent<T extends ILttngHandler>
        }
 
        @Override
-       public boolean eventEnabled(String eventName) {
+       public boolean eventEnabled(EventRule eventRule) {
+               /* Notify the filter change manager of the command */
+               FilterChangeNotifier.getInstance().addEventRule(eventRule);
+
+               String eventName = eventRule.getEventName();
+
                if (eventName.equals(WILDCARD)) {
                        enabledWildcards.incrementAndGet();
                        return true;
                }
-
                if (eventName.endsWith(WILDCARD)) {
                        /* Strip the "*" from the name. */
                        String prefix = eventName.substring(0, eventName.length() - 1);
@@ -206,6 +211,9 @@ public abstract class AbstractLttngAgent<T extends ILttngHandler>
 
        @Override
        public boolean eventDisabled(String eventName) {
+               /* Notify the filter change manager of the command */
+               FilterChangeNotifier.getInstance().removeEventRules(eventName);
+
                if (eventName.equals(WILDCARD)) {
                        int newCount = enabledWildcards.decrementAndGet();
                        if (newCount < 0) {
@@ -225,19 +233,11 @@ public abstract class AbstractLttngAgent<T extends ILttngHandler>
                return decrementEventCount(eventName, enabledEvents);
        }
 
+       /*
+        * Implementation of this method is domain-specific.
+        */
        @Override
-       public Iterable<String> listEnabledEvents() {
-               List<String> events = new LinkedList<String>();
-
-               if (enabledWildcards.get() > 0) {
-                       events.add(WILDCARD);
-               }
-               for (String prefix : enabledEventPrefixes.keySet()) {
-                       events.add(new String(prefix + WILDCARD));
-               }
-               events.addAll(enabledEvents.keySet());
-               return events;
-       }
+       public abstract Collection<String> listAvailableEvents();
 
        @Override
        public boolean isEventEnabled(String eventName) {
This page took 0.026698 seconds and 5 git commands to generate.