Browse Source

Properly track packet references with instant sending

NX 6 years ago
parent
commit
e708b41088
1 changed files with 22 additions and 5 deletions
  1. 22 5
      Source/Native/enet.h

+ 22 - 5
Source/Native/enet.h

@@ -1387,7 +1387,11 @@ extern "C" {
 				memcpy(packet->data, data, dataLength);
 				memcpy(packet->data, data, dataLength);
 		}
 		}
 
 
-		packet->referenceCount = 0;
+		if (flags & ENET_PACKET_FLAG_INSTANT)
+			packet->referenceCount = 1;
+		else
+			packet->referenceCount = 0;
+
 		packet->flags = flags;
 		packet->flags = flags;
 		packet->dataLength = dataLength;
 		packet->dataLength = dataLength;
 		packet->freeCallback = NULL;
 		packet->freeCallback = NULL;
@@ -1417,7 +1421,11 @@ extern "C" {
 				memcpy(packet->data, (char*)data + dataOffset, dataLength - dataOffset);
 				memcpy(packet->data, (char*)data + dataOffset, dataLength - dataOffset);
 		}
 		}
 
 
-		packet->referenceCount = 0;
+		if (flags & ENET_PACKET_FLAG_INSTANT)
+			packet->referenceCount = 1;
+		else
+			packet->referenceCount = 0;
+
 		packet->flags = flags;
 		packet->flags = flags;
 		packet->dataLength = dataLength - dataOffset;
 		packet->dataLength = dataLength - dataOffset;
 		packet->freeCallback = NULL;
 		packet->freeCallback = NULL;
@@ -4114,7 +4122,10 @@ extern "C" {
 			enet_peer_send(currentPeer, channelID, packet);
 			enet_peer_send(currentPeer, channelID, packet);
 		}
 		}
 
 
-		if (!(packet->flags & ENET_PACKET_FLAG_INSTANT) && packet->referenceCount == 0)
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			--packet->referenceCount;
+
+		if (packet->referenceCount == 0)
 			enet_packet_destroy(packet);
 			enet_packet_destroy(packet);
 	}
 	}
 
 
@@ -4128,7 +4139,10 @@ extern "C" {
 			enet_peer_send(currentPeer, channelID, packet);
 			enet_peer_send(currentPeer, channelID, packet);
 		}
 		}
 
 
-		if (!(packet->flags & ENET_PACKET_FLAG_INSTANT) && packet->referenceCount == 0)
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			--packet->referenceCount;
+
+		if (packet->referenceCount == 0)
 			enet_packet_destroy(packet);
 			enet_packet_destroy(packet);
 	}
 	}
 
 
@@ -4148,7 +4162,10 @@ extern "C" {
 			enet_peer_send(currentPeer, channelID, packet);
 			enet_peer_send(currentPeer, channelID, packet);
 		}
 		}
 
 
-		if (!(packet->flags & ENET_PACKET_FLAG_INSTANT) && packet->referenceCount == 0)
+		if (packet->flags & ENET_PACKET_FLAG_INSTANT)
+			--packet->referenceCount;
+
+		if (packet->referenceCount == 0)
 			enet_packet_destroy(packet);
 			enet_packet_destroy(packet);
 	}
 	}