enabledEventList is shared between the LTTngThread and eventTimer threads but is not synchronized.
This patch changes enabledEventList's type from an ArrayList to a synchronizedList which implements the same interface. Signed-off-by: Jérémie Galarneau <[email protected]> --- .../org/lttng/ust/jul/LTTngTCPSessiondClient.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/liblttng-ust-jul/org/lttng/ust/jul/LTTngTCPSessiondClient.java b/liblttng-ust-jul/org/lttng/ust/jul/LTTngTCPSessiondClient.java index 25d1cb2..0d9a485 100644 --- a/liblttng-ust-jul/org/lttng/ust/jul/LTTngTCPSessiondClient.java +++ b/liblttng-ust-jul/org/lttng/ust/jul/LTTngTCPSessiondClient.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Timer; import java.util.TimerTask; import java.util.logging.Logger; +import java.util.Collections; class USTRegisterMsg { public static int pid; @@ -57,7 +58,8 @@ public class LTTngTCPSessiondClient { private Semaphore registerSem; private Timer eventTimer; - private List<LTTngEvent> enabledEventList = new ArrayList<LTTngEvent>(); + private List<LTTngEvent> enabledEventList = Collections.synchronizedList( + new ArrayList<LTTngEvent>()); /* * Map of Logger objects that have been enabled. They are indexed by name. */ @@ -86,7 +88,10 @@ public class LTTngTCPSessiondClient { * We have to make a copy here since it is possible that the * enabled event list is changed during an iteration on it. */ - List<LTTngEvent> tmpList = new ArrayList<LTTngEvent>(enabledEventList); + List<LTTngEvent> tmpList; + synchronized(enabledEventList) { + tmpList = new ArrayList<LTTngEvent>(enabledEventList); + } LTTngSessiondCmd2_4.sessiond_enable_handler enableCmd = new LTTngSessiondCmd2_4.sessiond_enable_handler(); @@ -277,8 +282,10 @@ public class LTTngTCPSessiondClient { * Add the event to the list so it can be enabled if * the logger appears at some point in time. */ - if (enabledEventList.contains(event) == false) { - enabledEventList.add(event); + synchronized (enabledEventList) { + if (enabledEventList.contains(event) == false) { + enabledEventList.add(event); + } } } data = enableCmd.getBytes(); -- 1.9.0 _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
