Skip to content

Commit 70c4f92

Browse files
committed
Fix the failing test
1 parent 1e9ed89 commit 70c4f92

File tree

2 files changed

+23
-30
lines changed

2 files changed

+23
-30
lines changed

kotlinx-coroutines-core/jvm/test/channels/ChannelUndeliveredElementSelectOldStressTest.kt

+13-17
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,9 @@ class ChannelUndeliveredElementSelectOldStressTest(private val kind: TestChannel
155155
var counter = 0
156156
while (true) {
157157
val trySendData = Data(sentCnt++)
158-
val sendMode = Random.nextInt(2) + 1
159-
sentStatus[trySendData.x] = sendMode
158+
sentStatus[trySendData.x] = 1
160159
selectOld<Unit> { channel.onSend(trySendData) {} }
161-
sentStatus[trySendData.x] = sendMode + 2
160+
sentStatus[trySendData.x] = 3
162161
when {
163162
// must artificially slow down LINKED_LIST sender to avoid overwhelming receiver and going OOM
164163
kind == TestChannelKind.LINKED_LIST -> while (sentCnt > lastReceived + 100) yield()
@@ -172,7 +171,7 @@ class ChannelUndeliveredElementSelectOldStressTest(private val kind: TestChannel
172171

173172
private suspend fun stopSender() {
174173
stoppedSender++
175-
sender.cancel()
174+
sender.cancelAndJoin()
176175
senderDone.receive()
177176
}
178177

@@ -207,25 +206,22 @@ class ChannelUndeliveredElementSelectOldStressTest(private val kind: TestChannel
207206
}
208207

209208
private inner class Data(val x: Long) {
210-
private val failedToDeliverOrReceived = atomic(false)
211-
private var firstFailedToDeliverOrReceivedCallTrace: Exception? = null
209+
private val firstFailedToDeliverOrReceivedCallTrace = atomic<Exception?>(null)
212210

213211
fun failedToDeliver() {
214-
if (failedToDeliverOrReceived.compareAndSet(false, true)) {
215-
firstFailedToDeliverOrReceivedCallTrace = Exception("First onUndeliveredElement() call")
216-
} else {
217-
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace!!)
212+
val trace = Exception("First onUndeliveredElement() call")
213+
if (firstFailedToDeliverOrReceivedCallTrace.compareAndSet(null, trace)) {
214+
failedToDeliverCnt.incrementAndGet()
215+
failedStatus[x] = 1
216+
return
218217
}
219-
failedToDeliverCnt.incrementAndGet()
220-
failedStatus[x] = 1
218+
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace.value!!)
221219
}
222220

223221
fun onReceived() {
224-
if (failedToDeliverOrReceived.compareAndSet(false, true)) {
225-
firstFailedToDeliverOrReceivedCallTrace = Exception("First onReceived() call")
226-
} else {
227-
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace!!)
228-
}
222+
val trace = Exception("First onReceived() call")
223+
if (firstFailedToDeliverOrReceivedCallTrace.compareAndSet(null, trace)) return
224+
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace.value!!)
229225
}
230226
}
231227

kotlinx-coroutines-core/jvm/test/channels/ChannelUndeliveredElementStressTest.kt

+10-13
Original file line numberDiff line numberDiff line change
@@ -221,25 +221,22 @@ class ChannelUndeliveredElementStressTest(private val kind: TestChannelKind) : T
221221
}
222222

223223
private inner class Data(val x: Long) {
224-
private val failedToDeliverOrReceived = atomic(false)
225-
private var firstFailedToDeliverOrReceivedCallTrace: Exception? = null
224+
private val firstFailedToDeliverOrReceivedCallTrace = atomic<Exception?>(null)
226225

227226
fun failedToDeliver() {
228-
if (failedToDeliverOrReceived.compareAndSet(false, true)) {
229-
firstFailedToDeliverOrReceivedCallTrace = Exception("First onUndeliveredElement() call")
230-
} else {
231-
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace!!)
227+
val trace = Exception("First onUndeliveredElement() call")
228+
if (firstFailedToDeliverOrReceivedCallTrace.compareAndSet(null, trace)) {
229+
failedToDeliverCnt.incrementAndGet()
230+
failedStatus[x] = 1
231+
return
232232
}
233-
failedToDeliverCnt.incrementAndGet()
234-
failedStatus[x] = 1
233+
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace.value!!)
235234
}
236235

237236
fun onReceived() {
238-
if (failedToDeliverOrReceived.compareAndSet(false, true)) {
239-
firstFailedToDeliverOrReceivedCallTrace = Exception("First onReceived() call")
240-
} else {
241-
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace!!)
242-
}
237+
val trace = Exception("First onReceived() call")
238+
if (firstFailedToDeliverOrReceivedCallTrace.compareAndSet(null, trace)) return
239+
throw IllegalStateException("onUndeliveredElement()/onReceived() notified twice", firstFailedToDeliverOrReceivedCallTrace.value!!)
243240
}
244241
}
245242

0 commit comments

Comments
 (0)