@@ -1000,6 +1000,9 @@ internal class ByteBufferChannel(
1000
1000
}
1001
1001
1002
1002
suspend override fun writeAvailable (src : ByteBuffer ): Int {
1003
+ val delegated = resolveDelegation(this )
1004
+ if (delegated != = this ) return delegated.writeAvailable(src)
1005
+
1003
1006
val copied = writeAsMuchAsPossible(src)
1004
1007
if (copied > 0 ) return copied
1005
1008
@@ -1032,6 +1035,9 @@ internal class ByteBufferChannel(
1032
1035
}
1033
1036
1034
1037
suspend override fun writeFully (src : ByteBuffer ) {
1038
+ val delegated = resolveDelegation(this )
1039
+ if (delegated != = this ) return delegated.writeFully(src)
1040
+
1035
1041
writeAsMuchAsPossible(src)
1036
1042
if (! src.hasRemaining()) return
1037
1043
@@ -1101,10 +1107,13 @@ internal class ByteBufferChannel(
1101
1107
if (limit == 0L ) return 0L
1102
1108
if (src.isClosedForRead) {
1103
1109
if (joined != null ) {
1104
- check(tryCompleteJoining(joined))
1110
+ check(src. tryCompleteJoining(joined))
1105
1111
}
1106
1112
return 0L
1107
1113
}
1114
+ if (joined != null && src.tryCompleteJoining(joined)) {
1115
+ return 0L
1116
+ }
1108
1117
1109
1118
val autoFlush = autoFlush
1110
1119
val byteOrder = writeByteOrder
@@ -1161,9 +1170,6 @@ internal class ByteBufferChannel(
1161
1170
}
1162
1171
}
1163
1172
1164
- // println("flush")
1165
- flush()
1166
-
1167
1173
if (joined != null ) {
1168
1174
if (src.tryCompleteJoining(joined)) break
1169
1175
else if (src.state.capacity.flush()) { // force flush src to read-up all the bytes
@@ -1176,7 +1182,9 @@ internal class ByteBufferChannel(
1176
1182
if (copied >= limit) break
1177
1183
1178
1184
// println("readSuspend?")
1179
- if (! src.readSuspend(1 )) {
1185
+ flush()
1186
+
1187
+ if (src.availableForRead == 0 && ! src.readSuspend(1 )) {
1180
1188
// println("readSuspend failed")
1181
1189
if (joined == null || src.tryCompleteJoining(joined)) break
1182
1190
}
@@ -1292,6 +1300,9 @@ internal class ByteBufferChannel(
1292
1300
}
1293
1301
1294
1302
suspend override fun writeFully (src : ByteArray , offset : Int , length : Int ) {
1303
+ val delegated = resolveDelegation(this )
1304
+ if (delegated != = this ) return delegated.writeFully(src, offset, length)
1305
+
1295
1306
var rem = length
1296
1307
var off = offset
1297
1308
@@ -1315,6 +1326,9 @@ internal class ByteBufferChannel(
1315
1326
}
1316
1327
1317
1328
suspend override fun writeAvailable (src : ByteArray , offset : Int , length : Int ): Int {
1329
+ val delegated = resolveDelegation(this )
1330
+ if (delegated != = this ) return delegated.writeAvailable(src, offset, length)
1331
+
1318
1332
val size = writeAsMuchAsPossible(src, offset, length)
1319
1333
if (size > 0 ) return size
1320
1334
return writeSuspend(src, offset, length)
@@ -1392,6 +1406,9 @@ internal class ByteBufferChannel(
1392
1406
}
1393
1407
1394
1408
suspend override fun writePacket (packet : ByteReadPacket ) {
1409
+ val delegated = resolveDelegation(this )
1410
+ if (delegated != = this ) return delegated.writePacket(packet)
1411
+
1395
1412
try {
1396
1413
while (! packet.isEmpty) {
1397
1414
if (tryWritePacketPart(packet) == 0 ) break
0 commit comments