Reference copies of atomic lists when calling them (in case the list is cleared in a reentrant call

This commit is contained in:
Robinson 2023-06-16 14:48:19 +02:00
parent cf4b61f4de
commit 7e748bd7dc
No known key found for this signature in database
GPG Key ID: 8E7DB78588BD6F5C

View File

@ -367,7 +367,8 @@ internal class ListenerManager<CONNECTION: Connection>(private val logger: KLogg
* Invoked when a connection is first initialized, but BEFORE it's connected to the remote address.
*/
suspend fun notifyInit(connection: CONNECTION) {
onInitList.value.forEach {
val list = onInitList.value
list.forEach {
try {
it(connection)
} catch (t: Throwable) {
@ -382,7 +383,8 @@ internal class ListenerManager<CONNECTION: Connection>(private val logger: KLogg
* Invoked when a connection is connected to a remote address.
*/
suspend fun notifyConnect(connection: CONNECTION) {
onConnectList.value.forEach {
val list = onConnectList.value
list.forEach {
try {
it(connection)
} catch (t: Throwable) {
@ -397,7 +399,8 @@ internal class ListenerManager<CONNECTION: Connection>(private val logger: KLogg
* Invoked when a connection is disconnected to a remote address.
*/
suspend fun notifyDisconnect(connection: CONNECTION) {
onDisconnectList.value.forEach {
val list = onDisconnectList.value
list.forEach {
try {
it(connection)
} catch (t: Throwable) {
@ -416,7 +419,8 @@ internal class ListenerManager<CONNECTION: Connection>(private val logger: KLogg
fun notifyError(connection: CONNECTION, exception: Throwable) {
logger.error("Error with connection $connection", exception)
onErrorList.value.forEach {
val list = onErrorList.value
list.forEach {
try {
it(connection, exception)
} catch (t: Throwable) {
@ -435,7 +439,8 @@ internal class ListenerManager<CONNECTION: Connection>(private val logger: KLogg
fun notifyError(exception: Throwable) {
logger.error("Global error", exception)
onErrorGlobalList.value.forEach {
val list = onErrorGlobalList.value
list.forEach {
try {
it(exception)
} catch (t: Throwable) {