X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=sidebyside;f=liblttng-ust-java-agent%2Fjava%2Forg%2Flttng%2Fust%2Fagent%2FLogFrameworkSkeleton.java;h=6775827a07ba3ccb8a368fde285506553d6d1ae3;hb=d09aa6cd1efdb8733343781be86b11d73e5bc1ae;hp=4ad981e9375b59596ce5bcb21dfd3a13733ca6c4;hpb=dc1d9562be4fdee6ae3f74c58e2d0543a4fd4530;p=lttng-ust.git diff --git a/liblttng-ust-java-agent/java/org/lttng/ust/agent/LogFrameworkSkeleton.java b/liblttng-ust-java-agent/java/org/lttng/ust/agent/LogFrameworkSkeleton.java index 4ad981e9..6775827a 100644 --- a/liblttng-ust-java-agent/java/org/lttng/ust/agent/LogFrameworkSkeleton.java +++ b/liblttng-ust-java-agent/java/org/lttng/ust/agent/LogFrameworkSkeleton.java @@ -27,6 +27,19 @@ public abstract class LogFrameworkSkeleton implements LogFramework { /* A map of event name and reference count */ private Map enabledLoggers; + /* + * If the following attribute is false, the internal ref count is + * never decremented when disabling a logger. This was the original + * behaviour of this agent, and this bug worked in concert with a + * bug in the session daemon which would send multiple disable + * commands for the same event name (manual disable + another + * disable on session destroy). The following attribute is needed + * because this version of the agent could be connected to a + * fixed session daemon, or a non-fixed session daemon, and it needs + * to work in both situations. + */ + private boolean enableRefCountDecrement = false; + public LogFrameworkSkeleton() { this.enabledLoggers = new HashMap(); } @@ -68,6 +81,11 @@ public abstract class LogFrameworkSkeleton implements LogFramework { refcount--; assert (refcount >= 0); + if (enableRefCountDecrement) { + /* Effectively decrement reference count. */ + enabledLoggers.put(name, refcount); + } + if (refcount == 0) { /* Event is not used anymore, remove it from the map */ Integer oldval = enabledLoggers.remove(name); @@ -91,4 +109,8 @@ public abstract class LogFrameworkSkeleton implements LogFramework { protected Integer getEventCount() { return enabledLoggers.size(); } + + public void setEnableRefCountDecrement(boolean enableRefCountDecrement) { + this.enableRefCountDecrement = enableRefCountDecrement; + } }