@@ -754,14 +754,14 @@ internal class ByteBufferChannel(
754
754
resumeWriteOp()
755
755
}
756
756
757
- private tailrec fun resolveDelegation (current : ByteBufferChannel , joining : JoiningState ): ByteBufferChannel {
757
+ private tailrec fun resolveDelegation (current : ByteBufferChannel , joining : JoiningState ): ByteBufferChannel ? {
758
758
if (current.state == = ReadWriteBufferState .Terminated ) {
759
759
val joinedTo = joining.delegatedTo
760
760
val nextJoining = joinedTo.joining ? : return joinedTo
761
761
return resolveDelegation(joinedTo, nextJoining)
762
762
}
763
763
764
- return current
764
+ return null
765
765
}
766
766
767
767
private suspend fun delegateByte (b : Byte ) {
@@ -778,7 +778,7 @@ internal class ByteBufferChannel(
778
778
}
779
779
780
780
suspend override fun writeByte (b : Byte ) {
781
- joining?.let { return resolveDelegation(this , it). writeByte(b) }
781
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeByte(b) } }
782
782
783
783
val buffer = setupStateForWrite() ? : return delegateByte(b)
784
784
val c = state.capacity
@@ -826,7 +826,7 @@ internal class ByteBufferChannel(
826
826
}
827
827
828
828
suspend override fun writeShort (s : Short ) {
829
- joining?.let { return resolveDelegation(this , it). writeShort(s) }
829
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeShort(s) } }
830
830
831
831
val buffer = setupStateForWrite() ? : return delegateShort(s)
832
832
val c = state.capacity
@@ -907,7 +907,8 @@ internal class ByteBufferChannel(
907
907
val buffer = setupStateForWrite()
908
908
if (buffer == null ) {
909
909
val delegation = resolveDelegation(this , joining!! )
910
- if (delegation != = this ) return delegation.writeInt(i)
910
+ @Suppress(" SuspiciousEqualsCombination" )
911
+ if (delegation != null && delegation != = this ) return delegation.writeInt(i)
911
912
else return delegateSuspend(joining!! , { writeInt(i) })
912
913
}
913
914
val c = state.capacity
@@ -965,7 +966,7 @@ internal class ByteBufferChannel(
965
966
}
966
967
967
968
suspend override fun writeLong (l : Long ) {
968
- joining?.let { return resolveDelegation(this , it). writeLong(l) }
969
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeLong(l) } }
969
970
970
971
val buffer = setupStateForWrite() ? : return delegateLong(l)
971
972
val c = state.capacity
@@ -1004,43 +1005,43 @@ internal class ByteBufferChannel(
1004
1005
}
1005
1006
1006
1007
suspend override fun writeAvailable (src : ByteBuffer ): Int {
1007
- joining?.let { return resolveDelegation(this , it). writeAvailable(src) }
1008
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeAvailable(src) } }
1008
1009
1009
1010
val copied = writeAsMuchAsPossible(src)
1010
1011
if (copied > 0 ) return copied
1011
1012
1012
- joining?.let { return resolveDelegation(this , it). writeAvailableSuspend(src) }
1013
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeAvailableSuspend(src) } }
1013
1014
return writeAvailableSuspend(src)
1014
1015
}
1015
1016
1016
1017
suspend override fun writeAvailable (src : BufferView ): Int {
1017
- joining?.let { return resolveDelegation(this , it). writeAvailable(src) }
1018
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeAvailable(src) } }
1018
1019
1019
1020
val copied = writeAsMuchAsPossible(src)
1020
1021
if (copied > 0 ) return copied
1021
1022
1022
- joining?.let { return resolveDelegation(this , it). writeAvailableSuspend(src) }
1023
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeAvailableSuspend(src) } }
1023
1024
return writeAvailableSuspend(src)
1024
1025
}
1025
1026
1026
1027
private suspend fun writeAvailableSuspend (src : ByteBuffer ): Int {
1027
1028
writeSuspend(1 ) // here we don't need to restoreStateAfterWrite as write copy loop doesn't hold state
1028
1029
1029
- joining?.let { return resolveDelegation(this , it). writeAvailableSuspend(src) }
1030
+ joining?.let { resolveDelegation(this , it)?. let { return it . writeAvailableSuspend(src) } }
1030
1031
1031
1032
return writeAvailable(src)
1032
1033
}
1033
1034
1034
1035
private suspend fun writeAvailableSuspend (src : BufferView ): Int {
1035
1036
writeSuspend(1 )
1036
1037
1037
- joining?.let { return resolveDelegation(this , it). writeAvailableSuspend(src) }
1038
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeAvailableSuspend(src) } }
1038
1039
1039
1040
return writeAvailable(src)
1040
1041
}
1041
1042
1042
1043
suspend override fun writeFully (src : ByteBuffer ) {
1043
- joining?.let { return resolveDelegation(this , it). writeFully(src) }
1044
+ joining?.let { resolveDelegation(this , it)?. let { return . writeFully(src) } }
1044
1045
1045
1046
writeAsMuchAsPossible(src)
1046
1047
if (! src.hasRemaining()) return
@@ -1059,7 +1060,7 @@ internal class ByteBufferChannel(
1059
1060
while (src.hasRemaining()) {
1060
1061
writeSuspend(1 )
1061
1062
1062
- joining?.let { return resolveDelegation(this , it). writeFully(src) }
1063
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeFully(src) } }
1063
1064
1064
1065
writeAsMuchAsPossible(src)
1065
1066
}
@@ -1069,7 +1070,7 @@ internal class ByteBufferChannel(
1069
1070
while (src.canRead()) {
1070
1071
writeSuspend(1 )
1071
1072
1072
- joining?.let { return resolveDelegation(this , it). writeFully(src) }
1073
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeFully(src) } }
1073
1074
1074
1075
writeAsMuchAsPossible(src)
1075
1076
}
@@ -1313,7 +1314,7 @@ internal class ByteBufferChannel(
1313
1314
}
1314
1315
1315
1316
suspend override fun writeFully (src : ByteArray , offset : Int , length : Int ) {
1316
- joining?.let { return resolveDelegation(this , it). writeFully(src, offset, length) }
1317
+ joining?.let { resolveDelegation(this , it)?. let { return it . writeFully(src, offset, length) } }
1317
1318
1318
1319
var rem = length
1319
1320
var off = offset
@@ -1338,7 +1339,7 @@ internal class ByteBufferChannel(
1338
1339
}
1339
1340
1340
1341
suspend override fun writeAvailable (src : ByteArray , offset : Int , length : Int ): Int {
1341
- joining?.let { return resolveDelegation(this , it). writeAvailable(src, offset, length) }
1342
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeAvailable(src, offset, length) } }
1342
1343
1343
1344
val size = writeAsMuchAsPossible(src, offset, length)
1344
1345
if (size > 0 ) return size
@@ -1349,7 +1350,7 @@ internal class ByteBufferChannel(
1349
1350
while (true ) {
1350
1351
writeSuspend(1 )
1351
1352
1352
- joining?.let { return resolveDelegation(this , it). writeSuspend(src, offset, length) }
1353
+ joining?.let { resolveDelegation(this , it)?. let { return it. writeSuspend(src, offset, length) } }
1353
1354
1354
1355
val size = writeAsMuchAsPossible(src, offset, length)
1355
1356
if (size > 0 ) return size
@@ -1383,7 +1384,7 @@ internal class ByteBufferChannel(
1383
1384
1384
1385
private suspend fun writeBlockSuspend (min : Int , block : (ByteBuffer ) -> Unit ) {
1385
1386
writeSuspend(min)
1386
- joining?.let { return resolveDelegation(this , it). write(min, block) }
1387
+ joining?.let { resolveDelegation(this , it)?. let { return it. write(min, block) } }
1387
1388
return write(min, block)
1388
1389
}
1389
1390
@@ -1417,7 +1418,7 @@ internal class ByteBufferChannel(
1417
1418
}
1418
1419
1419
1420
suspend override fun writePacket (packet : ByteReadPacket ) {
1420
- joining?.let { return resolveDelegation(this , it). writePacket(packet) }
1421
+ joining?.let { resolveDelegation(this , it)?. let { return it. writePacket(packet) } }
1421
1422
1422
1423
try {
1423
1424
while (! packet.isEmpty) {
@@ -1429,7 +1430,7 @@ internal class ByteBufferChannel(
1429
1430
}
1430
1431
1431
1432
if (packet.remaining > 0 ) {
1432
- joining?.let { return resolveDelegation(this , it). writePacket(packet) }
1433
+ joining?.let { resolveDelegation(this , it)?. let { return it. writePacket(packet) } }
1433
1434
return writePacketSuspend(packet)
1434
1435
}
1435
1436
}
@@ -1439,7 +1440,7 @@ internal class ByteBufferChannel(
1439
1440
while (! packet.isEmpty) {
1440
1441
writeSuspend(1 )
1441
1442
1442
- joining?.let { return resolveDelegation(this , it). writePacket(packet) }
1443
+ joining?.let { resolveDelegation(this , it)?. let { return it. writePacket(packet) } }
1443
1444
tryWritePacketPart(packet)
1444
1445
}
1445
1446
} finally {
0 commit comments