diff options
-rw-r--r-- | WireGuardNetworkExtension/PacketTunnelProvider.swift | 17 |
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 |