@@ -110,7 +110,9 @@ int CRcvBufferNew::insert(CUnit* unit)
110
110
const int offset = CSeqNo::seqoff(m_iStartSeqNo, seqno);
111
111
112
112
IF_RCVBUF_DEBUG(ScopedLog scoped_log);
113
-
IF_RCVBUF_DEBUG(scoped_log.ss << "CRcvBufferNew::insert: seqno " << seqno << " m_iStartSeqNo " << m_iStartSeqNo << " offset " << offset);
113
+
IF_RCVBUF_DEBUG(scoped_log.ss << "CRcvBufferNew::insert: seqno " << seqno);
114
+
IF_RCVBUF_DEBUG(scoped_log.ss << " msgno " << unit->m_Packet.getMsgSeq(m_bPeerRexmitFlag));
115
+
IF_RCVBUF_DEBUG(scoped_log.ss << " m_iStartSeqNo " << m_iStartSeqNo << " offset " << offset);
114
116
115
117
if (offset < 0)
116
118
{
@@ -198,15 +200,17 @@ int CRcvBufferNew::dropUpTo(int32_t seqno)
198
200
return iDropCnt;
199
201
}
200
202
201
-
void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)
203
+
int CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)
202
204
{
203
205
IF_RCVBUF_DEBUG(ScopedLog scoped_log);
204
206
IF_RCVBUF_DEBUG(scoped_log.ss << "CRcvBufferNew::dropMessage: seqnolo " << seqnolo << " seqnohi " << seqnohi << " m_iStartSeqNo " << m_iStartSeqNo);
205
207
// TODO: count bytes as removed?
206
208
const int end_pos = incPos(m_iStartPos, m_iMaxPosInc);
207
209
if (msgno != 0)
208
210
{
211
+
IF_RCVBUF_DEBUG(scoped_log.ss << " msgno " << msgno);
209
212
int minDroppedOffset = -1;
213
+
int iDropCnt = 0;
210
214
for (int i = m_iStartPos; i != end_pos; i = incPos(i))
211
215
{
212
216
// TODO: Maybe check status?
@@ -216,12 +220,14 @@ void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)
216
220
const int32_t msgseq = m_entries[i].pUnit->m_Packet.getMsgSeq(m_bPeerRexmitFlag);
217
221
if (msgseq == msgno)
218
222
{
223
+
++iDropCnt;
219
224
dropUnitInPos(i);
220
225
m_entries[i].status = EntryState_Drop;
221
226
if (minDroppedOffset == -1)
222
227
minDroppedOffset = offPos(m_iStartPos, i);
223
228
}
224
229
}
230
+
IF_RCVBUF_DEBUG(scoped_log.ss << " iDropCnt " << iDropCnt);
225
231
// Check if units before m_iFirstNonreadPos are dropped.
226
232
bool needUpdateNonreadPos = (minDroppedOffset != -1 && minDroppedOffset <= getRcvDataSize());
227
233
releaseNextFillerEntries();
@@ -236,7 +242,7 @@ void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)
236
242
m_iFirstReadableOutOfOrder = -1;
237
243
updateFirstReadableOutOfOrder();
238
244
}
239
-
return;
245
+
return iDropCnt;
240
246
}
241
247
242
248
// Drop by packet seqno range.
@@ -246,15 +252,17 @@ void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)
246
252
{
247
253
LOGC(rbuflog.Debug, log << "CRcvBufferNew.dropMessage(): nothing to drop. Requested [" << seqnolo << "; "
248
254
<< seqnohi << "]. Buffer start " << m_iStartSeqNo << ".");
249
-
return;
255
+
return 0;
250
256
}
251
257
252
258
const int start_off = max(0, offset_a);
253
259
const int last_pos = incPos(m_iStartPos, offset_b);
254
260
int minDroppedOffset = -1;
261
+
int iDropCnt = 0;
255
262
for (int i = incPos(m_iStartPos, start_off); i != end_pos && i != last_pos; i = incPos(i))
256
263
{
257
264
dropUnitInPos(i);
265
+
++iDropCnt;
258
266
m_entries[i].status = EntryState_Drop;
259
267
if (minDroppedOffset == -1)
260
268
minDroppedOffset = offPos(m_iStartPos, i);
@@ -277,6 +285,8 @@ void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)
277
285
m_iFirstReadableOutOfOrder = -1;
278
286
updateFirstReadableOutOfOrder();
279
287
}
288
+
289
+
return iDropCnt;
280
290
}
281
291
282
292
int CRcvBufferNew::readMessage(char* data, size_t len, SRT_MSGCTRL* msgctrl)
@@ -288,11 +298,11 @@ int CRcvBufferNew::readMessage(char* data, size_t len, SRT_MSGCTRL* msgctrl)
288
298
return 0;
289
299
}
290
300
291
-
IF_RCVBUF_DEBUG(ScopedLog scoped_log);
292
-
IF_RCVBUF_DEBUG(scoped_log.ss << "CRcvBufferNew::readMessage. m_iStartSeqNo " << m_iStartSeqNo);
293
-
294
301
const int readPos = canReadInOrder ? m_iStartPos : m_iFirstReadableOutOfOrder;
295
302
303
+
IF_RCVBUF_DEBUG(ScopedLog scoped_log);
304
+
IF_RCVBUF_DEBUG(scoped_log.ss << "CRcvBufferNew::readMessage. m_iStartSeqNo " << m_iStartSeqNo << " m_iStartPos " << m_iStartPos << " readPos " << readPos);
305
+
296
306
size_t remain = len;
297
307
char* dst = data;
298
308
int pkts_read = 0;
@@ -381,6 +391,8 @@ int CRcvBufferNew::readMessage(char* data, size_t len, SRT_MSGCTRL* msgctrl)
381
391
LOGC(rbuflog.Error, log << "readMessage: small dst buffer, copied only " << bytes_read << "/" << bytes_extracted << " bytes.");
382
392
}
383
393
394
+
IF_RCVBUF_DEBUG(scoped_log.ss << " pldi64 " << *reinterpret_cast<uint64_t*>(data));
395
+
384
396
return bytes_read;
385
397
}
386
398
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4