@@ -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
0 commit comments