Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
* [lttng-dev] [PATCH lttng-ust] Fix: Unsynchronized access in LTTngTCPSessiondClient
@ 2014-02-20 16:22 Jérémie Galarneau
  2014-02-22 16:12 ` Mathieu Desnoyers
  2014-02-22 20:11 ` Mathieu Desnoyers
  0 siblings, 2 replies; 8+ messages in thread
From: Jérémie Galarneau @ 2014-02-20 16:22 UTC (permalink / raw)


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 <jeremie.galarneau at efficios.com>
---
 .../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




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2014-02-25 23:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-20 16:22 [lttng-dev] [PATCH lttng-ust] Fix: Unsynchronized access in LTTngTCPSessiondClient Jérémie Galarneau
2014-02-22 16:12 ` Mathieu Desnoyers
2014-02-22 19:15   ` Jérémie Galarneau
2014-02-22 20:08     ` Mathieu Desnoyers
2014-02-22 20:11 ` Mathieu Desnoyers
2014-02-22 20:19   ` Jérémie Galarneau
2014-02-25 21:32   ` [lttng-dev] [PATCH lttng-ust v2] " Jérémie Galarneau
2014-02-25 23:01     ` Mathieu Desnoyers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox