Only resume once for websocket message responses (#3023)

- Don't try to resume on a websocket response coroutine if it was already resumed.
This commit is contained in:
Joris Pelgröm 2022-11-03 17:28:44 +01:00 committed by GitHub
parent 0e3d50960f
commit 9eac506105
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -418,7 +418,9 @@ class WebSocketRepositoryImpl @Inject constructor(
private fun handleMessage(response: SocketResponse) {
val id = response.id!!
activeMessages[id]?.let {
it.onResponse!!.resumeWith(Result.success(response))
it.onResponse?.let { cont ->
if (cont.isActive) cont.resumeWith(Result.success(response))
}
if (it.eventFlow == null) {
activeMessages.remove(id)
}
@ -505,7 +507,9 @@ class WebSocketRepositoryImpl @Inject constructor(
activeMessages
.filterValues { it.eventFlow == null }
.forEach {
it.value.onResponse?.resumeWith(Result.failure(IOException()))
it.value.onResponse?.let { cont ->
if (cont.isActive) cont.resumeWith(Result.failure(IOException()))
}
activeMessages.remove(it.key)
}
}