From 4ce4aac14954ee9c302708468ec6c0efd3a1ac2f Mon Sep 17 00:00:00 2001 From: lsalzman Date: Wed, 27 Feb 2013 16:29:22 +0200 Subject: [PATCH] added ENET_PACKET_FLAG_SENT to indicate that a packet has been sent --- ChangeLog | 1 + include/enet/enet.h | 5 ++++- protocol.c | 12 ++++++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8fb667a..642201f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +* added ENET_PACKET_FLAG_SENT to indicate that a packet is being freed because it has been sent * added userData field to ENetPacket * changed how random seed is generated on Windows to avoid import warnings * fixed case where disconnects could be generated with no preceding connect event diff --git a/include/enet/enet.h b/include/enet/enet.h index a691f5e..07b9bbd 100644 --- a/include/enet/enet.h +++ b/include/enet/enet.h @@ -112,7 +112,10 @@ typedef enum _ENetPacketFlag ENET_PACKET_FLAG_NO_ALLOCATE = (1 << 2), /** packet will be fragmented using unreliable (instead of reliable) sends * if it exceeds the MTU */ - ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT = (1 << 3) + ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT = (1 << 3), + + /** whether the packet has been sent from all queues it has been entered into */ + ENET_PACKET_FLAG_SENT = (1<<8) } ENetPacketFlag; typedef void (ENET_CALLBACK * ENetPacketFreeCallback) (struct _ENetPacket *); diff --git a/protocol.c b/protocol.c index f951ac9..d6cc33a 100644 --- a/protocol.c +++ b/protocol.c @@ -163,7 +163,11 @@ enet_protocol_remove_sent_unreliable_commands (ENetPeer * peer) -- outgoingCommand -> packet -> referenceCount; if (outgoingCommand -> packet -> referenceCount == 0) - enet_packet_destroy (outgoingCommand -> packet); + { + outgoingCommand -> packet -> flags |= ENET_PACKET_FLAG_SENT; + + enet_packet_destroy (outgoingCommand -> packet); + } } enet_free (outgoingCommand); @@ -237,7 +241,11 @@ enet_protocol_remove_sent_reliable_command (ENetPeer * peer, enet_uint16 reliabl -- outgoingCommand -> packet -> referenceCount; if (outgoingCommand -> packet -> referenceCount == 0) - enet_packet_destroy (outgoingCommand -> packet); + { + outgoingCommand -> packet -> flags |= ENET_PACKET_FLAG_SENT; + + enet_packet_destroy (outgoingCommand -> packet); + } } enet_free (outgoingCommand);