@@ -22,7 +22,7 @@ import com.itsaky.androidide.logsender.socket.SocketCommandParser
2222import com.itsaky.androidide.models.LogLine
2323import com.itsaky.androidide.utils.ILogger
2424import java.net.ServerSocket
25- import java.util.Collections
25+ import java.util.concurrent.ConcurrentHashMap
2626import java.util.concurrent.atomic.AtomicBoolean
2727import java.util.concurrent.atomic.AtomicInteger
2828
@@ -35,7 +35,7 @@ class MultiLogSenderHandler(consumer: ((LogLine) -> Unit)? = null) :
3535 Thread (" MultiLogSenderHandler" ), AutoCloseable {
3636
3737 private val log = ILogger .newInstance(" MultiLogSenderHandler" )
38- private val clients = Collections .synchronizedMap( HashMap <String , LogSenderHandler >() )
38+ private val clients = ConcurrentHashMap <String , LogSenderHandler >()
3939 private val port = AtomicInteger (- 1 )
4040 private var keepAlive = AtomicBoolean (false )
4141
@@ -67,7 +67,8 @@ class MultiLogSenderHandler(consumer: ((LogLine) -> Unit)? = null) :
6767 val senderInfoLine = clientSocket.getInputStream().bufferedReader().readLine()
6868 val command = SocketCommandParser .parse(senderInfoLine)
6969 if (command == null || command !is SenderInfoCommand ) {
70- log.error(" Cannot accept log sender client. A sender must send the /sender command first." )
70+ log.error(
71+ " Cannot accept log sender client. A sender must send the /sender command first." )
7172 clientSocket.use {}
7273 continue
7374 }
@@ -96,13 +97,11 @@ class MultiLogSenderHandler(consumer: ((LogLine) -> Unit)? = null) :
9697 }
9798
9899 private fun removeAllClients () {
99- synchronized(this .clients) {
100- val iterator = this .clients.iterator()
101- while (iterator.hasNext()) {
102- iterator.next().value.closeAndLogError()
103- iterator.remove()
104- }
100+ this .clients.forEach { (_, handler) ->
101+ handler.closeAndLogError()
105102 }
103+
104+ this .clients.clear()
106105 }
107106
108107 override fun start () {
0 commit comments