Public ClosedWriteChannelException and message for it
diff --git a/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteBufferChannel.kt b/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteBufferChannel.kt
index 33d54d7..e4c7df8 100644
--- a/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteBufferChannel.kt
+++ b/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteBufferChannel.kt
@@ -4,13 +4,14 @@
import kotlinx.coroutines.experimental.CancellableContinuation
import kotlinx.coroutines.experimental.channels.ClosedReceiveChannelException
-import kotlinx.coroutines.experimental.channels.ClosedSendChannelException
import kotlinx.coroutines.experimental.io.internal.*
import kotlinx.coroutines.experimental.io.packet.*
import kotlinx.coroutines.experimental.suspendCancellableCoroutine
import java.nio.BufferOverflowException
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater
+internal const val DEFAULT_CLOSE_MESSAGE = "Byte channel was closed"
+
// implementation for ByteChannel
internal class ByteBufferChannel(
override val autoFlush: Boolean,
@@ -1276,7 +1277,8 @@
c.resume(state.capacity.availableForRead > 0)
}
- WriteOp.getAndSet(this, null)?.tryResumeWithException(cause ?: ClosedSendChannelException(null))
+ WriteOp.getAndSet(this, null)?.tryResumeWithException(cause ?:
+ ClosedWriteChannelException(DEFAULT_CLOSE_MESSAGE))
}
private tailrec suspend fun readSuspend(size: Int): Boolean {
diff --git a/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteWriteChannel.kt b/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteWriteChannel.kt
index 73f5ca7..58a9510 100644
--- a/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteWriteChannel.kt
+++ b/core/kotlinx-coroutines-io/src/main/kotlin/kotlinx/coroutines/experimental/io/ByteWriteChannel.kt
@@ -1,6 +1,8 @@
package kotlinx.coroutines.experimental.io
-import kotlinx.coroutines.experimental.io.packet.*
+import kotlinx.coroutines.experimental.io.packet.ByteReadPacket
+import kotlinx.coroutines.experimental.io.packet.ByteWritePacket
+import kotlinx.coroutines.experimental.io.packet.buildPacket
import java.nio.ByteBuffer
import java.nio.CharBuffer
import java.util.concurrent.CancellationException
@@ -174,4 +176,9 @@
writePacket(buildPacket { builder() })
}
-class ClosedWriteChannelException(message: String?) : CancellationException(message)
\ No newline at end of file
+/**
+ * Indicates attempt to write on [isClosedForWrite][ByteWriteChannel.isClosedForWrite] channel
+ * that was closed without a cause. A _failed_ channel rethrows the original [close][ByteWriteChannel.close] cause
+ * exception on send attempts.
+ */
+public class ClosedWriteChannelException(message: String?) : CancellationException(message)
\ No newline at end of file