From 356029abf69684cac9ec9d2f03210a8bbb954fdf Mon Sep 17 00:00:00 2001 From: MysterD Date: Tue, 29 Sep 2020 23:30:48 -0700 Subject: [PATCH] Forget all reliable packets on network shutdown Prevents strange case where one instance of a game could connect to itself. --- src/pc/network/network.c | 1 + src/pc/network/packets/packet.h | 1 + src/pc/network/packets/packet_reliable.c | 4 ++++ 3 files changed, 6 insertions(+) diff --git a/src/pc/network/network.c b/src/pc/network/network.c index b46063deb..bb5818e48 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -177,6 +177,7 @@ void network_update(void) { } void network_shutdown(void) { + network_forget_all_reliable(); if (gNetworkType == NT_NONE) { return; } if (gNetworkSystem == NULL) { LOG_ERROR("no network system attached"); return; } diff --git a/src/pc/network/packets/packet.h b/src/pc/network/packets/packet.h index ba7a940b0..b04e4dce3 100644 --- a/src/pc/network/packets/packet.h +++ b/src/pc/network/packets/packet.h @@ -63,6 +63,7 @@ u32 packet_hash(struct Packet* packet); bool packet_check_hash(struct Packet* packet); // packet_reliable.c +void network_forget_all_reliable(void); void network_send_ack(struct Packet* p); void network_receive_ack(struct Packet* p); void network_remember_reliable(struct Packet* p); diff --git a/src/pc/network/packets/packet_reliable.c b/src/pc/network/packets/packet_reliable.c index e32eff139..7c89d8f03 100644 --- a/src/pc/network/packets/packet_reliable.c +++ b/src/pc/network/packets/packet_reliable.c @@ -33,6 +33,10 @@ static void remove_node_from_list(struct PacketLinkedList* node) { free(node); } +void network_forget_all_reliable(void) { + while (head != NULL) { remove_node_from_list(head); } +} + void network_send_ack(struct Packet* p) { // grab seq num u16 seqId = 0;