mirror of
https://github.com/RGBCube/serenity
synced 2025-05-23 19:15:07 +00:00
Kernel: Use RefPtr instead of LockRefPtr for File and subclasses
This was mostly straightforward, as all the storage locations are guarded by some related mutex. The use of old-school associated mutexes instead of MutexProtected is unfortunate, but the process to modernize such code is ongoing.
This commit is contained in:
parent
61bb9103c2
commit
03cc45e5a2
20 changed files with 63 additions and 63 deletions
|
@ -30,13 +30,13 @@ static void handle_ipv4(EthernetFrameHeader const&, size_t frame_size, Time cons
|
|||
static void handle_icmp(EthernetFrameHeader const&, IPv4Packet const&, Time const& packet_timestamp);
|
||||
static void handle_udp(IPv4Packet const&, Time const& packet_timestamp);
|
||||
static void handle_tcp(IPv4Packet const&, Time const& packet_timestamp);
|
||||
static void send_delayed_tcp_ack(LockRefPtr<TCPSocket> socket);
|
||||
static void send_delayed_tcp_ack(TCPSocket& socket);
|
||||
static void send_tcp_rst(IPv4Packet const& ipv4_packet, TCPPacket const& tcp_packet, LockRefPtr<NetworkAdapter> adapter);
|
||||
static void flush_delayed_tcp_acks();
|
||||
static void retransmit_tcp_packets();
|
||||
|
||||
static Thread* network_task = nullptr;
|
||||
static HashTable<LockRefPtr<TCPSocket>>* delayed_ack_sockets;
|
||||
static HashTable<NonnullRefPtr<TCPSocket>>* delayed_ack_sockets;
|
||||
|
||||
[[noreturn]] static void NetworkTask_main(void*);
|
||||
|
||||
|
@ -57,7 +57,7 @@ bool NetworkTask::is_current()
|
|||
|
||||
void NetworkTask_main(void*)
|
||||
{
|
||||
delayed_ack_sockets = new HashTable<LockRefPtr<TCPSocket>>;
|
||||
delayed_ack_sockets = new HashTable<NonnullRefPtr<TCPSocket>>;
|
||||
|
||||
WaitQueue packet_wait_queue;
|
||||
int pending_packets = 0;
|
||||
|
@ -229,7 +229,7 @@ void handle_icmp(EthernetFrameHeader const& eth, IPv4Packet const& ipv4_packet,
|
|||
dbgln_if(ICMP_DEBUG, "handle_icmp: source={}, destination={}, type={:#02x}, code={:#02x}", ipv4_packet.source().to_string(), ipv4_packet.destination().to_string(), icmp_header.type(), icmp_header.code());
|
||||
|
||||
{
|
||||
Vector<NonnullLockRefPtr<IPv4Socket>> icmp_sockets;
|
||||
Vector<NonnullRefPtr<IPv4Socket>> icmp_sockets;
|
||||
IPv4Socket::all_sockets().with_exclusive([&](auto& sockets) {
|
||||
for (auto& socket : sockets) {
|
||||
if (socket.protocol() == (unsigned)IPv4Protocol::ICMP)
|
||||
|
@ -302,11 +302,11 @@ void handle_udp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
socket->did_receive(ipv4_packet.source(), udp_packet.source_port(), { &ipv4_packet, sizeof(IPv4Packet) + ipv4_packet.payload_size() }, packet_timestamp);
|
||||
}
|
||||
|
||||
void send_delayed_tcp_ack(LockRefPtr<TCPSocket> socket)
|
||||
void send_delayed_tcp_ack(TCPSocket& socket)
|
||||
{
|
||||
VERIFY(socket->mutex().is_locked());
|
||||
if (!socket->should_delay_next_ack()) {
|
||||
[[maybe_unused]] auto result = socket->send_ack();
|
||||
VERIFY(socket.mutex().is_locked());
|
||||
if (!socket.should_delay_next_ack()) {
|
||||
[[maybe_unused]] auto result = socket.send_ack();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -315,11 +315,11 @@ void send_delayed_tcp_ack(LockRefPtr<TCPSocket> socket)
|
|||
|
||||
void flush_delayed_tcp_acks()
|
||||
{
|
||||
Vector<LockRefPtr<TCPSocket>, 32> remaining_sockets;
|
||||
Vector<NonnullRefPtr<TCPSocket>, 32> remaining_sockets;
|
||||
for (auto& socket : *delayed_ack_sockets) {
|
||||
MutexLocker locker(socket->mutex());
|
||||
if (socket->should_delay_next_ack()) {
|
||||
MUST(remaining_sockets.try_append(socket));
|
||||
MUST(remaining_sockets.try_append(*socket));
|
||||
continue;
|
||||
}
|
||||
[[maybe_unused]] auto result = socket->send_ack();
|
||||
|
@ -484,7 +484,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
return;
|
||||
case TCPFlags::ACK | TCPFlags::FIN:
|
||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
||||
send_delayed_tcp_ack(socket);
|
||||
send_delayed_tcp_ack(*socket);
|
||||
socket->set_state(TCPSocket::State::Closed);
|
||||
socket->set_error(TCPSocket::Error::FINDuringConnect);
|
||||
socket->set_setup_state(Socket::SetupState::Completed);
|
||||
|
@ -636,7 +636,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
socket->did_receive(ipv4_packet.source(), tcp_packet.source_port(), { &ipv4_packet, sizeof(IPv4Packet) + ipv4_packet.payload_size() }, packet_timestamp);
|
||||
|
||||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size + 1);
|
||||
send_delayed_tcp_ack(socket);
|
||||
send_delayed_tcp_ack(*socket);
|
||||
socket->set_state(TCPSocket::State::CloseWait);
|
||||
socket->set_connected(false);
|
||||
return;
|
||||
|
@ -647,7 +647,7 @@ void handle_tcp(IPv4Packet const& ipv4_packet, Time const& packet_timestamp)
|
|||
socket->set_ack_number(tcp_packet.sequence_number() + payload_size);
|
||||
dbgln_if(TCP_DEBUG, "Got packet with ack_no={}, seq_no={}, payload_size={}, acking it with new ack_no={}, seq_no={}",
|
||||
tcp_packet.ack_number(), tcp_packet.sequence_number(), payload_size, socket->ack_number(), socket->sequence_number());
|
||||
send_delayed_tcp_ack(socket);
|
||||
send_delayed_tcp_ack(*socket);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -657,7 +657,7 @@ void retransmit_tcp_packets()
|
|||
{
|
||||
// We must keep the sockets alive until after we've unlocked the hash table
|
||||
// in case retransmit_packets() realizes that it wants to close the socket.
|
||||
Vector<NonnullLockRefPtr<TCPSocket>, 16> sockets;
|
||||
Vector<NonnullRefPtr<TCPSocket>, 16> sockets;
|
||||
TCPSocket::sockets_for_retransmit().for_each_shared([&](auto const& socket) {
|
||||
// We ignore allocation failures above the first 16 guaranteed socket slots, as
|
||||
// we will just retransmit their packets the next time around
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue