aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WireGuardNetworkExtension/PacketTunnelProvider.swift17
1 files changed, 7 insertions, 10 deletions
diff --git a/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuardNetworkExtension/PacketTunnelProvider.swift
index 64e9f5d..9959dec 100644
--- a/WireGuardNetworkExtension/PacketTunnelProvider.swift
+++ b/WireGuardNetworkExtension/PacketTunnelProvider.swift
@@ -192,22 +192,19 @@ class WireGuardContext {
readPacketCondition.signal()
}
+ func packetsRead(packets: [NEPacket]) {
+ outboundPackets.append(contentsOf: packets)
+ readPacketCondition.signal()
+ }
+
func readPacket(isTunnelClosed: inout Bool) -> NEPacket? {
if outboundPackets.isEmpty {
- let readPacketCondition = NSCondition()
readPacketCondition.lock()
- var packetsObtained: [NEPacket]?
- packetFlow.readPacketObjects { (packets: [NEPacket]) in
- packetsObtained = packets
- readPacketCondition.signal()
- }
+ packetFlow.readPacketObjects(completionHandler: packetsRead)
// Wait till the completion handler of packetFlow.readPacketObjects() finishes
- while packetsObtained == nil && !self.isTunnelClosed {
+ while outboundPackets.isEmpty && !self.isTunnelClosed {
readPacketCondition.wait()
}
- if let packetsObtained = packetsObtained {
- outboundPackets = packetsObtained
- }
readPacketCondition.unlock()
}
isTunnelClosed = self.isTunnelClosed