diff --git a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/LockFreeLinkedList.kt b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/LockFreeLinkedList.kt
index 3fb9b9512..cd5bd161c 100644
--- a/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/LockFreeLinkedList.kt
+++ b/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/utils/LockFreeLinkedList.kt
@@ -45,7 +45,7 @@ open class LockFreeLinkedList<E> {
     @PublishedApi
     internal val head: Head<E> = Head(tail)
 
-    fun removeFirst(): E {
+    open fun removeFirst(): E {
         while (true) {
             val currentFirst = head.nextNode
             if (!currentFirst.isValidElementNode()) {
@@ -57,11 +57,11 @@ open class LockFreeLinkedList<E> {
         }
     }
 
-    fun peekFirst(): E = head.nextNode.letValueIfValid { return it } ?: throw NoSuchElementException()
+    open fun peekFirst(): E = head.nextNode.letValueIfValid { return it } ?: throw NoSuchElementException()
 
-    fun peekLast(): E = head.iterateBeforeFirst { it === tail }.letValueIfValid { return it } ?: throw NoSuchElementException()
+    open fun peekLast(): E = head.iterateBeforeFirst { it === tail }.letValueIfValid { return it } ?: throw NoSuchElementException()
 
-    fun removeLast(): E {
+    open fun removeLast(): E {
         while (true) {
             val beforeLast = head.iterateBeforeFirst { it.nextNode === tail }
             if (!beforeLast.isValidElementNode()) {
@@ -74,7 +74,7 @@ open class LockFreeLinkedList<E> {
         }
     }
 
-    fun addLast(element: E) {
+    open fun addLast(element: E) {
         val node = element.asNode(tail)
 
         while (true) {
@@ -85,7 +85,7 @@ open class LockFreeLinkedList<E> {
         }
     }
 
-    operator fun plusAssign(element: E) = this.addLast(element)
+    open operator fun plusAssign(element: E) = this.addLast(element)
 
     inline fun filteringGetOrAdd(filter: (E) -> Boolean, noinline supplier: () -> E): E {
         val node = LazyNode(tail, supplier)
@@ -122,7 +122,7 @@ open class LockFreeLinkedList<E> {
         }, { it !is Tail })
     }.dropLast(4)
 
-    fun remove(element: E): Boolean {
+    open fun remove(element: E): Boolean {
         while (true) {
             val before = head.iterateBeforeNodeValue(element)
             val toRemove = before.nextNode
@@ -148,15 +148,15 @@ open class LockFreeLinkedList<E> {
 
     val size: Int get() = head.countChildIterate<Node<E>>({ it.nextNode }, { it !is Tail }) - 1 // empty head is always included
 
-    operator fun contains(element: E): Boolean {
+    open operator fun contains(element: E): Boolean {
         forEach { if (it == element) return true }
         return false
     }
 
     @Suppress("unused")
-    fun containsAll(elements: Collection<E>): Boolean = elements.all { contains(it) }
+    open fun containsAll(elements: Collection<E>): Boolean = elements.all { contains(it) }
 
-    fun isEmpty(): Boolean = head.allMatching { it.isValidElementNode().not() }
+    open fun isEmpty(): Boolean = head.allMatching { it.isValidElementNode().not() }
 
     inline fun forEach(block: (E) -> Unit) {
         var node: Node<E> = head
@@ -167,10 +167,10 @@ open class LockFreeLinkedList<E> {
         }
     }
 
-    fun addAll(elements: Collection<E>) = elements.forEach { addLast(it) }
+    open fun addAll(elements: Collection<E>) = elements.forEach { addLast(it) }
 
     @Suppress("unused")
-    fun clear() {
+    open fun clear() {
         val first = head.nextNode
         head.nextNode = tail
         first.childIterateReturnFirstUnsatisfying({
@@ -182,7 +182,7 @@ open class LockFreeLinkedList<E> {
     }
 
     @Suppress("unused")
-    fun removeAll(elements: Collection<E>): Boolean = elements.all { remove(it) }
+    open fun removeAll(elements: Collection<E>): Boolean = elements.all { remove(it) }
 
     /*