diff --git a/CHANGELOG.md b/CHANGELOG.md index 566065eac49..8e62db63770 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 0.25.4 + +* `Versions`: + * `Ktor`: `3.1.1` -> `3.1.2` + * `Koin`: `4.0.2` -> `4.0.4` +* `Coroutines`: + * Add `SmartKeyRWLocker.withWriteLocks` extension with vararg keys +* `Transactions`: + * Fix order of rollback actions calling + ## 0.25.3 * `Coroutines`: diff --git a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartKeyRWLocker.kt b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartKeyRWLocker.kt index 407eec5add4..1f92ed2651b 100644 --- a/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartKeyRWLocker.kt +++ b/coroutines/src/commonMain/kotlin/dev/inmo/micro_utils/coroutines/SmartKeyRWLocker.kt @@ -221,4 +221,6 @@ suspend inline fun SmartKeyRWLocker.withWriteLocks(keys: Iterable, unlockWrite(it) } } -} \ No newline at end of file +} + +suspend inline fun SmartKeyRWLocker.withWriteLocks(vararg keys: T, action: () -> R): R = withWriteLocks(keys.asIterable(), action) diff --git a/gradle.properties b/gradle.properties index e934dd22763..87d42ae962b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ crypto_js_version=4.1.1 # Project data group=dev.inmo -version=0.25.3 -android_code_version=293 +version=0.25.4 +android_code_version=294 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0f32dc7d040..c2719b201f1 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -15,11 +15,11 @@ sqlite = "3.49.1.0" korlibs = "5.4.0" uuid = "0.8.4" -ktor = "3.1.1" +ktor = "3.1.2" gh-release = "2.5.2" -koin = "4.0.2" +koin = "4.0.4" okio = "3.10.2" diff --git a/transactions/src/commonMain/kotlin/TransactionsDSL.kt b/transactions/src/commonMain/kotlin/TransactionsDSL.kt index a743b03c4a9..76db5e960d6 100644 --- a/transactions/src/commonMain/kotlin/TransactionsDSL.kt +++ b/transactions/src/commonMain/kotlin/TransactionsDSL.kt @@ -2,7 +2,7 @@ package dev.inmo.micro_utils.transactions typealias TransactionDSLRollbackLambda = suspend (Throwable) -> Unit class TransactionsDSL internal constructor() { - internal val rollbackActions = LinkedHashSet() + internal val rollbackActions = ArrayList() internal fun addRollbackAction(rollbackAction: TransactionDSLRollbackLambda) { rollbackActions.add(rollbackAction) @@ -71,9 +71,10 @@ suspend fun doSuspendTransaction( return runCatching { transactionsDSL.block() }.onFailure { e -> - transactionsDSL.rollbackActions.forEach { + for (i in transactionsDSL.rollbackActions.lastIndex downTo 0) { + val rollbackAction = transactionsDSL.rollbackActions[i] runCatching { - it.invoke(e) + rollbackAction.invoke(e) }.onFailure { ee -> onRollbackStepError(ee) }