ConnectionCounts are now threadsafe

master
Robinson 2023-12-12 13:31:07 +01:00
parent e80cc93c72
commit bd6476059b
No known key found for this signature in database
GPG Key ID: 8E7DB78588BD6F5C
1 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,19 @@
/*
* Copyright 2023 dorkbox, llc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dorkbox.network.handshake
import org.agrona.collections.Object2IntHashMap
@ -9,18 +25,22 @@ import java.net.InetAddress
internal class ConnectionCounts {
private val connectionsPerIpCounts = Object2IntHashMap<InetAddress>(-1)
@Synchronized
fun get(inetAddress: InetAddress): Int {
return connectionsPerIpCounts.getOrPut(inetAddress) { 0 }
}
@Synchronized
fun increment(inetAddress: InetAddress, currentCount: Int) {
connectionsPerIpCounts[inetAddress] = currentCount + 1
}
@Synchronized
fun decrement(inetAddress: InetAddress, currentCount: Int) {
connectionsPerIpCounts[inetAddress] = currentCount - 1
}
@Synchronized
fun decrementSlow(inetAddress: InetAddress) {
if (connectionsPerIpCounts.containsKey(inetAddress)) {
val defaultVal = connectionsPerIpCounts.getValue(inetAddress)
@ -28,10 +48,12 @@ internal class ConnectionCounts {
}
}
@Synchronized
fun isEmpty(): Boolean {
return connectionsPerIpCounts.isEmpty()
}
@Synchronized
override fun toString(): String {
return connectionsPerIpCounts.entries.map { it.key }.joinToString()
}