[lttng-dev] [PATCH lttng-ust] Fix: Unsynchronized access in LTTngTCPSessiondClient
Jérémie Galarneau
jeremie.galarneau at efficios.com
Thu Feb 20 11:22:33 EST 2014
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
More information about the lttng-dev
mailing list