Skip to content

Commit fc2f55d

Browse files
committed
Drop m_list_size from ReliablePacketBuffer
It's not required and, worse, can lead to bugs.
1 parent d7c10b6 commit fc2f55d

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

src/network/connection.cpp

+20-18
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ void ReliablePacketBuffer::print()
169169
index++;
170170
}
171171
}
172+
172173
bool ReliablePacketBuffer::empty()
173174
{
174175
MutexAutoLock listlock(m_list_mutex);
@@ -177,7 +178,8 @@ bool ReliablePacketBuffer::empty()
177178

178179
u32 ReliablePacketBuffer::size()
179180
{
180-
return m_list_size;
181+
MutexAutoLock listlock(m_list_mutex);
182+
return m_list.size();
181183
}
182184

183185
bool ReliablePacketBuffer::containsPacket(u16 seqnum)
@@ -198,17 +200,19 @@ RPBSearchResult ReliablePacketBuffer::findPacket(u16 seqnum)
198200
}
199201
return i;
200202
}
203+
201204
RPBSearchResult ReliablePacketBuffer::notFound()
202205
{
203206
return m_list.end();
204207
}
208+
205209
bool ReliablePacketBuffer::getFirstSeqnum(u16& result)
206210
{
207211
MutexAutoLock listlock(m_list_mutex);
208212
if (m_list.empty())
209213
return false;
210-
BufferedPacket p = *m_list.begin();
211-
result = readU16(&p.data[BASE_HEADER_SIZE+1]);
214+
const BufferedPacket &p = *m_list.begin();
215+
result = readU16(&p.data[BASE_HEADER_SIZE + 1]);
212216
return true;
213217
}
214218

@@ -219,16 +223,16 @@ BufferedPacket ReliablePacketBuffer::popFirst()
219223
throw NotFoundException("Buffer is empty");
220224
BufferedPacket p = *m_list.begin();
221225
m_list.erase(m_list.begin());
222-
--m_list_size;
223226

224-
if (m_list_size == 0) {
227+
if (m_list.empty()) {
225228
m_oldest_non_answered_ack = 0;
226229
} else {
227230
m_oldest_non_answered_ack =
228-
readU16(&(*m_list.begin()).data[BASE_HEADER_SIZE+1]);
231+
readU16(&m_list.begin()->data[BASE_HEADER_SIZE + 1]);
229232
}
230233
return p;
231234
}
235+
232236
BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
233237
{
234238
MutexAutoLock listlock(m_list_mutex);
@@ -249,15 +253,17 @@ BufferedPacket ReliablePacketBuffer::popSeqnum(u16 seqnum)
249253
}
250254

251255
m_list.erase(r);
252-
--m_list_size;
253256

254-
if (m_list_size == 0)
255-
{ m_oldest_non_answered_ack = 0; }
256-
else
257-
{ m_oldest_non_answered_ack = readU16(&(*m_list.begin()).data[BASE_HEADER_SIZE+1]); }
257+
if (m_list.empty()) {
258+
m_oldest_non_answered_ack = 0;
259+
} else {
260+
m_oldest_non_answered_ack =
261+
readU16(&m_list.begin()->data[BASE_HEADER_SIZE + 1]);
262+
}
258263
return p;
259264
}
260-
void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
265+
266+
void ReliablePacketBuffer::insert(BufferedPacket &p, u16 next_expected)
261267
{
262268
MutexAutoLock listlock(m_list_mutex);
263269
if (p.data.getSize() < BASE_HEADER_SIZE + 3) {
@@ -284,8 +290,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
284290
return;
285291
}
286292

287-
++m_list_size;
288-
sanity_check(m_list_size <= SEQNUM_MAX+1); // FIXME: Handle the error?
293+
sanity_check(m_list.size() <= SEQNUM_MAX); // FIXME: Handle the error?
289294

290295
// Find the right place for the packet and insert it there
291296
// If list is empty, just add it
@@ -324,8 +329,6 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
324329
if (s == seqnum) {
325330
/* nothing to do this seems to be a resent packet */
326331
/* for paranoia reason data should be compared */
327-
--m_list_size;
328-
329332
if (
330333
(readU16(&(i->data[BASE_HEADER_SIZE+1])) != seqnum) ||
331334
(i->data.getSize() != p.data.getSize()) ||
@@ -348,8 +351,7 @@ void ReliablePacketBuffer::insert(BufferedPacket &p,u16 next_expected)
348351
/* insert or push back */
349352
else if (i != m_list.end()) {
350353
m_list.insert(i, p);
351-
}
352-
else {
354+
} else {
353355
m_list.push_back(p);
354356
}
355357

src/network/connection.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ class ReliablePacketBuffer
240240

241241
BufferedPacket popFirst();
242242
BufferedPacket popSeqnum(u16 seqnum);
243-
void insert(BufferedPacket &p,u16 next_expected);
243+
void insert(BufferedPacket &p, u16 next_expected);
244244

245245
void incrementTimeouts(float dtime);
246246
std::list<BufferedPacket> getTimedOuts(float timeout,
@@ -257,7 +257,6 @@ class ReliablePacketBuffer
257257
RPBSearchResult findPacket(u16 seqnum);
258258

259259
std::list<BufferedPacket> m_list;
260-
u32 m_list_size = 0;
261260

262261
u16 m_oldest_non_answered_ack;
263262

0 commit comments

Comments
 (0)