Skip to content

Commit e96bb61

Browse files
committed
improve refcount debug code
1 parent 30e86ce commit e96bb61

File tree

2 files changed

+12
-16
lines changed

2 files changed

+12
-16
lines changed

LiteNetLib/NetPacket.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public ushort FragmentsTotal
128128
public NetPacket Next;
129129

130130
#if DEBUG_REFCOUNT
131-
public int RefCount = 0;
131+
public int RefCount = 1;
132132
#endif
133133

134134
public NetPacket(int size)

LiteNetLib/NetPacketPool.cs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public NetPacket GetWithProperty(PacketProperty property)
3434

3535
public NetPacket GetPacket(int size)
3636
{
37-
if (size > NetConstants.MaxPacketSize)
37+
if (size > NetConstants.MaxPacketSize)
3838
return new NetPacket(size);
3939

4040
NetPacket packet;
@@ -46,15 +46,10 @@ public NetPacket GetPacket(int size)
4646
} while (packet != Interlocked.CompareExchange(ref _head, packet.Next, packet));
4747

4848
#if DEBUG_REFCOUNT
49-
if (Interlocked.Increment(ref packet.RefCount) > 1)
50-
{
51-
Interlocked.Decrement(ref packet.RefCount);
52-
NetDebug.WriteError("PacketRefCount more than 1: {0}", Environment.StackTrace);
53-
return new NetPacket(size);
54-
}
49+
Interlocked.Increment(ref packet.RefCount);
5550
#endif
5651

57-
_count--;
52+
Interlocked.Decrement(ref _count);
5853
packet.Size = size;
5954
if (packet.RawData.Length < size)
6055
packet.RawData = new byte[size];
@@ -69,20 +64,21 @@ public void Recycle(NetPacket packet)
6964
return;
7065
}
7166

72-
_count++;
67+
#if DEBUG_REFCOUNT
68+
int result = Interlocked.Decrement(ref packet.RefCount);
69+
if (result != 0)
70+
NetDebug.WriteError("PacketRefCount invalid: {0}, {1}", result, Environment.StackTrace);
71+
#endif
72+
73+
Interlocked.Increment(ref _count);
7374

7475
//Clean fragmented flag
7576
packet.RawData[0] = 0;
7677

77-
#if DEBUG_REFCOUNT
78-
if (packet.RefCount > 0)
79-
Interlocked.Decrement(ref packet.RefCount);
80-
#endif
81-
8278
do
8379
{
8480
packet.Next = _head;
8581
} while (packet.Next != Interlocked.CompareExchange(ref _head, packet, packet.Next));
8682
}
8783
}
88-
}
84+
}

0 commit comments

Comments
 (0)