diff --git a/driver-core/src/main/com/mongodb/event/ClusterListener.java b/driver-core/src/main/com/mongodb/event/ClusterListener.java index 68ca9df4755..8524e06344c 100644 --- a/driver-core/src/main/com/mongodb/event/ClusterListener.java +++ b/driver-core/src/main/com/mongodb/event/ClusterListener.java @@ -21,10 +21,13 @@ /** * A listener for cluster-related events. *
- * It does not have to be thread-safe. All events received by {@link ClusterListener}, {@link ServerListener}, + * All events received by {@link ClusterListener}, {@link ServerListener}, * {@link ServerMonitorListener} are totally ordered (and the event order implies the happens-before order), provided that the listeners - * are not shared by different {@code MongoClient}s. This means that even if you have a single class implementing all of - * {@link ClusterListener}, {@link ServerListener}, {@link ServerMonitorListener}, it does not have to be thread-safe. + * are not shared by different {@code MongoClient}s. This guarantee holds even if you have a single class implementing + * all of {@link ClusterListener}, {@link ServerListener}, {@link ServerMonitorListener}. However, this guarantee does not mean that + * implementations automatically do not need to synchronize memory accesses to prevent data races. + * For example, if data that the listener collects in memory is accessed outside of the normal execution of the listener + * by the {@code MongoClient}, then reading and writing actions must be synchronized. *
* @see ServerListener * @see ServerMonitorListener diff --git a/driver-core/src/main/com/mongodb/event/ServerListener.java b/driver-core/src/main/com/mongodb/event/ServerListener.java index 2e68b8d66f0..ead6f4e1b51 100644 --- a/driver-core/src/main/com/mongodb/event/ServerListener.java +++ b/driver-core/src/main/com/mongodb/event/ServerListener.java @@ -21,7 +21,7 @@ /** * A listener for server-related events *- * It does not have to be thread-safe, see {@link ClusterListener} for the details regarding the order of events. + * See {@link ClusterListener} for the details regarding the order of events and memory synchronization. *
* @see ClusterListener * @see ServerMonitorListener diff --git a/driver-core/src/main/com/mongodb/event/ServerMonitorListener.java b/driver-core/src/main/com/mongodb/event/ServerMonitorListener.java index 9708836ff4f..1c73ac30510 100644 --- a/driver-core/src/main/com/mongodb/event/ServerMonitorListener.java +++ b/driver-core/src/main/com/mongodb/event/ServerMonitorListener.java @@ -23,7 +23,7 @@ /** * A listener for server monitor-related events *- * It does not have to be thread-safe, see {@link ClusterListener} for the details regarding the order of events. + * See {@link ClusterListener} for the details regarding the order of events and memory synchronization. *
* @see ClusterListener * @see ServerListener