diff --git a/src/jvmMain/java/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState.java b/src/jvmMain/java/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState.java index f5b263b..6bb17a9 100644 --- a/src/jvmMain/java/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState.java +++ b/src/jvmMain/java/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState.java @@ -82,12 +82,16 @@ public /* open */ class SpinLockSynchronizedState @ManualStateManipulation @Override public final void close() { - switch (this._currentState.compareAndExchange(State.OPEN, State.CLOSED)) { - case CLOSED: - this.throwClosed(); - case IN_USE: - this.throwInUse(); - case OPEN: + while (true) { + switch (this._currentState.compareAndExchange(State.OPEN, State.CLOSED)) { + case CLOSED: + this.throwClosed(); + case IN_USE: + Thread.onSpinWait(); + continue; + case OPEN: + return; + } } } diff --git a/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/OwnedSpinLockSynchronizedState.kt b/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/OwnedSpinLockSynchronizedState.kt index 7324eb2..48ef451 100644 --- a/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/OwnedSpinLockSynchronizedState.kt +++ b/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/OwnedSpinLockSynchronizedState.kt @@ -26,10 +26,6 @@ public class OwnedSpinLockSynchronizedState : SpinLockSynchronizedState { throw IllegalStateException("Object is closed: ${this._owner}") } - override fun throwInUse(): Nothing { - throw IllegalStateException("Failed close object because it is in use: ${this._owner}") - } - override fun toString(): String { val base = super.toString() return base.substring(0, base.length - 1) + " of ${this._owner}>" diff --git a/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState$Errors.kt b/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState$Errors.kt index 0e415e8..d5d34b8 100644 --- a/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState$Errors.kt +++ b/src/jvmMain/kotlin/ru/landgrafhomyak/utility/closeable_state_1/SpinLockSynchronizedState$Errors.kt @@ -4,8 +4,4 @@ internal abstract class `SpinLockSynchronizedState$Errors` : CloseableState.Exte protected open fun throwClosed(): Nothing { throw IllegalStateException("Object is closed") } - - protected open fun throwInUse(): Nothing { - throw IllegalStateException("Failed close object because it is in use") - } } \ No newline at end of file