Repository: spark
Updated Branches:
  refs/heads/master e902dc443 -> 9b18009b8


SPARK-1934 [CORE] "this" reference escape to "selectorThread" during 
construction in ConnectionManager

This change reshuffles the order of initialization in `ConnectionManager` so 
that the last thing that happens is running `selectorThread`, which invokes a 
method that relies on object state in `ConnectionManager`

zsxwing also reported a similar problem in `BlockManager` in the JIRA, but I 
can't find a similar pattern there. Maybe it was subsequently fixed?

Author: Sean Owen <[email protected]>

Closes #4225 from srowen/SPARK-1934 and squashes the following commits:

c4dec3b [Sean Owen] Init all object state in ConnectionManager constructor 
before starting thread in constructor that accesses object's state


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/9b18009b
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/9b18009b
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/9b18009b

Branch: refs/heads/master
Commit: 9b18009b835c784e9716594713f3d27d8e48d86c
Parents: e902dc4
Author: Sean Owen <[email protected]>
Authored: Wed Jan 28 12:44:35 2015 -0800
Committer: Patrick Wendell <[email protected]>
Committed: Wed Jan 28 12:44:35 2015 -0800

----------------------------------------------------------------------
 .../org/apache/spark/network/nio/ConnectionManager.scala      | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/9b18009b/core/src/main/scala/org/apache/spark/network/nio/ConnectionManager.scala
----------------------------------------------------------------------
diff --git 
a/core/src/main/scala/org/apache/spark/network/nio/ConnectionManager.scala 
b/core/src/main/scala/org/apache/spark/network/nio/ConnectionManager.scala
index 03c4137..ee22c66 100644
--- a/core/src/main/scala/org/apache/spark/network/nio/ConnectionManager.scala
+++ b/core/src/main/scala/org/apache/spark/network/nio/ConnectionManager.scala
@@ -184,14 +184,16 @@ private[nio] class ConnectionManager(
   // to be able to track asynchronous messages
   private val idCount: AtomicInteger = new AtomicInteger(1)
 
+  private val writeRunnableStarted: HashSet[SelectionKey] = new 
HashSet[SelectionKey]()
+  private val readRunnableStarted: HashSet[SelectionKey] = new 
HashSet[SelectionKey]()
+
   private val selectorThread = new Thread("connection-manager-thread") {
     override def run() = ConnectionManager.this.run()
   }
   selectorThread.setDaemon(true)
+  // start this thread last, since it invokes run(), which accesses members 
above
   selectorThread.start()
 
-  private val writeRunnableStarted: HashSet[SelectionKey] = new 
HashSet[SelectionKey]()
-
   private def triggerWrite(key: SelectionKey) {
     val conn = connectionsByKey.getOrElse(key, null)
     if (conn == null) return
@@ -232,7 +234,6 @@ private[nio] class ConnectionManager(
     } )
   }
 
-  private val readRunnableStarted: HashSet[SelectionKey] = new 
HashSet[SelectionKey]()
 
   private def triggerRead(key: SelectionKey) {
     val conn = connectionsByKey.getOrElse(key, null)


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to