Made LockFreeLinkedList internal
diff --git a/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/Job.kt b/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/Job.kt
index fc89287..e8851d6 100644
--- a/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/Job.kt
+++ b/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/Job.kt
@@ -1,7 +1,7 @@
 package kotlinx.coroutines.experimental
 
-import kotlinx.coroutines.experimental.util.LockFreeLinkedListHead
-import kotlinx.coroutines.experimental.util.LockFreeLinkedListNode
+import kotlinx.coroutines.experimental.internal.LockFreeLinkedListHead
+import kotlinx.coroutines.experimental.internal.LockFreeLinkedListNode
 import java.util.concurrent.CancellationException
 import java.util.concurrent.Future
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater
@@ -120,7 +120,7 @@
 ) : AbstractCoroutineContextElement(Job), Job {
     // keeps a stack of cancel listeners or a special CANCELLED, other values denote completed scope
     @Volatile
-    private var state: Any? = Active() // will drop the list on cancel
+    private var state: Any? = ActiveList() // will drop the list on cancel
 
     // directly pass HandlerNode to parent scope to optimize one closure object (see makeNode)
     private val registration: Job.Registration? = parent?.onCompletion(CancelOnCompletion(parent, this))
@@ -134,7 +134,7 @@
     protected fun getState(): Any? = state
 
     protected fun updateState(expect: Any, update: Any?): Boolean {
-        expect as Active // assert type
+        expect as ActiveList // assert type
         require(update !is Active) // only active -> inactive transition is allowed
         if (!STATE.compareAndSet(this, expect, update)) return false
         // #1. Unregister from parent job
@@ -169,6 +169,7 @@
                 return EmptyRegistration
             }
             val node = nodeCache ?: makeNode(handler).apply { nodeCache = this }
+            state as ActiveList // assert type
             if (state.addLastIf(node) { this.state == state }) return node
         }
     }
@@ -188,7 +189,9 @@
             (handler as? JobNode)?.also { require(it.job === this) }
                     ?: InvokeOnCompletion(this, handler)
 
-    protected class Active : LockFreeLinkedListHead()
+    protected interface Active
+
+    private class ActiveList : LockFreeLinkedListHead(), Active
 
     protected abstract class CompletedExceptionally {
         abstract val cancelReason: Throwable?
diff --git a/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedList.kt b/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedList.kt
similarity index 98%
rename from kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedList.kt
rename to kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedList.kt
index fb8e531..6fed21e 100644
--- a/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedList.kt
+++ b/kotlinx-coroutines-core/src/main/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedList.kt
@@ -1,4 +1,4 @@
-package kotlinx.coroutines.experimental.util
+package kotlinx.coroutines.experimental.internal
 
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater
 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater
@@ -14,7 +14,7 @@
  * Sentinel node should be never removed.
  */
 @Suppress("LeakingThis")
-public open class LockFreeLinkedListNode {
+internal open class LockFreeLinkedListNode {
     @Volatile
     private var _next: Any = this // DoubleLinkedNode | Removed | CondAdd
     @Volatile
@@ -241,7 +241,7 @@
     }
 }
 
-public open class LockFreeLinkedListHead : LockFreeLinkedListNode() {
+internal open class LockFreeLinkedListHead : LockFreeLinkedListNode() {
     /**
      * Iterates over all elements in this list of a specified type.
      */
diff --git a/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedListStressTest.kt b/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedListStressTest.kt
similarity index 92%
rename from kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedListStressTest.kt
rename to kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedListStressTest.kt
index 9b28381..9aeabd3 100644
--- a/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedListStressTest.kt
+++ b/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedListStressTest.kt
@@ -1,4 +1,4 @@
-package kotlinx.coroutines.experimental.util
+package kotlinx.coroutines.experimental.internal
 
 import org.junit.Test
 import java.util.*
@@ -6,9 +6,8 @@
 import kotlin.concurrent.thread
 
 class LockFreeLinkedListStressTest {
-    data class IntNode(val i: Int) : LockFreeLinkedListNode()
-
-    val list = LockFreeLinkedListHead()
+    private data class IntNode(val i: Int) : LockFreeLinkedListNode()
+    private val list = LockFreeLinkedListHead()
 
     val threads = mutableListOf<Thread>()
     val nAdded = 10_000_000
diff --git a/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedListTest.kt b/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedListTest.kt
similarity index 97%
rename from kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedListTest.kt
rename to kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedListTest.kt
index e8d40df..90c8de6 100644
--- a/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/util/LockFreeLinkedListTest.kt
+++ b/kotlinx-coroutines-core/src/test/kotlin/kotlinx/coroutines/experimental/internal/LockFreeLinkedListTest.kt
@@ -1,4 +1,4 @@
-package kotlinx.coroutines.experimental.util
+package kotlinx.coroutines.experimental.internal
 
 import org.junit.Assert.*
 import org.junit.Test
diff --git a/pom.xml b/pom.xml
index 06a1510..d7187c1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -174,6 +174,9 @@
                         </goals>
                     </execution>
                 </executions>
+                <configuration>
+                    <args>-Xcoroutines=enable</args>
+                </configuration>
             </plugin>
 
         </plugins>