Properly use acquired permits in Semaphore
Fixes #1423
diff --git a/kotlinx-coroutines-core/common/src/sync/Semaphore.kt b/kotlinx-coroutines-core/common/src/sync/Semaphore.kt
index 160dcac..6ab377d 100644
--- a/kotlinx-coroutines-core/common/src/sync/Semaphore.kt
+++ b/kotlinx-coroutines-core/common/src/sync/Semaphore.kt
@@ -96,7 +96,7 @@
* and the maximum number of waiting acquirers cannot be greater than 2^31 in any
* real application.
*/
- private val _availablePermits = atomic(permits)
+ private val _availablePermits = atomic(permits - acquiredPermits)
override val availablePermits: Int get() = max(_availablePermits.value, 0)
// The queue of waiting acquirers is essentially an infinite array based on `SegmentQueue`;