summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Kernel/Net/TCPSocket.cpp3
-rw-r--r--Kernel/Net/TCPSocket.h1
2 files changed, 4 insertions, 0 deletions
diff --git a/Kernel/Net/TCPSocket.cpp b/Kernel/Net/TCPSocket.cpp
index 8389cec31c..98cdcb68e9 100644
--- a/Kernel/Net/TCPSocket.cpp
+++ b/Kernel/Net/TCPSocket.cpp
@@ -162,6 +162,7 @@ void TCPSocket::send_tcp_packet(u16 flags, const void* payload, int payload_size
tcp_packet.set_checksum(compute_tcp_checksum(local_address(), peer_address(), tcp_packet, payload_size));
if (tcp_packet.has_syn() || payload_size > 0) {
+ LOCKER(m_not_acked_lock);
m_not_acked.append({ m_sequence_number, move(buffer), 0, {} });
send_outgoing_packets();
return;
@@ -185,6 +186,7 @@ void TCPSocket::send_outgoing_packets()
auto now = kgettimeofday();
+ LOCKER(m_not_acked_lock);
for (auto& packet : m_not_acked) {
timeval diff;
timeval_sub(packet.tx_time, now, diff);
@@ -228,6 +230,7 @@ void TCPSocket::receive_tcp_packet(const TCPPacket& packet, u16 size)
#endif
int removed = 0;
+ LOCKER(m_not_acked_lock);
while (!m_not_acked.is_empty()) {
auto& packet = m_not_acked.first();
diff --git a/Kernel/Net/TCPSocket.h b/Kernel/Net/TCPSocket.h
index bfbe5eda20..a01cf3a1ac 100644
--- a/Kernel/Net/TCPSocket.h
+++ b/Kernel/Net/TCPSocket.h
@@ -172,5 +172,6 @@ private:
timeval tx_time;
};
+ Lock m_not_acked_lock { "TCPSocket unacked packets" };
SinglyLinkedList<OutgoingPacket> m_not_acked;
};