A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/Haivision/srt/commit/8c05c70d015c7d379823f389b5469901376ee5f4 below:

[core] Fix CRcvBufferNew::dropMessage() (#2222) · Haivision/srt@8c05c70 · GitHub

@@ -206,6 +206,7 @@ void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)

206 206

const int end_pos = incPos(m_iStartPos, m_iMaxPosInc);

207 207

if (msgno != 0)

208 208

{

209 +

int minDroppedOffset = -1;

209 210

for (int i = m_iStartPos; i != end_pos; i = incPos(i))

210 211

{

211 212

// TODO: Maybe check status?

@@ -215,11 +216,26 @@ void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)

215 216

const int32_t msgseq = m_entries[i].pUnit->m_Packet.getMsgSeq(m_bPeerRexmitFlag);

216 217

if (msgseq == msgno)

217 218

{

218 -

releaseUnitInPos(i);

219 +

dropUnitInPos(i);

219 220

m_entries[i].status = EntryState_Drop;

221 +

if (minDroppedOffset == -1)

222 +

minDroppedOffset = offPos(m_iStartPos, i);

220 223

}

221 224

}

222 - 225 +

// Check if units before m_iFirstNonreadPos are dropped.

226 +

bool needUpdateNonreadPos = (minDroppedOffset != -1 && minDroppedOffset <= getRcvDataSize());

227 +

releaseNextFillerEntries();

228 +

if (needUpdateNonreadPos)

229 +

{

230 +

m_iFirstNonreadPos = m_iStartPos;

231 +

updateNonreadPos();

232 +

}

233 +

if (!m_tsbpd.isEnabled() && m_bMessageAPI)

234 +

{

235 +

if (!checkFirstReadableOutOfOrder())

236 +

m_iFirstReadableOutOfOrder = -1;

237 +

updateFirstReadableOutOfOrder();

238 +

}

223 239

return;

224 240

}

225 241

@@ -235,17 +251,32 @@ void CRcvBufferNew::dropMessage(int32_t seqnolo, int32_t seqnohi, int32_t msgno)

235 251 236 252

const int start_off = max(0, offset_a);

237 253

const int last_pos = incPos(m_iStartPos, offset_b);

254 +

int minDroppedOffset = -1;

238 255

for (int i = incPos(m_iStartPos, start_off); i != end_pos && i != last_pos; i = incPos(i))

239 256

{

240 -

if (m_entries[i].pUnit)

241 -

{

242 -

releaseUnitInPos(i);

243 -

}

257 +

dropUnitInPos(i);

244 258

m_entries[i].status = EntryState_Drop;

259 +

if (minDroppedOffset == -1)

260 +

minDroppedOffset = offPos(m_iStartPos, i);

245 261

}

246 262 247 263

LOGC(rbuflog.Debug, log << "CRcvBufferNew.dropMessage(): [" << seqnolo << "; "

248 264

<< seqnohi << "].");

265 + 266 +

// Check if units before m_iFirstNonreadPos are dropped.

267 +

bool needUpdateNonreadPos = (minDroppedOffset != -1 && minDroppedOffset <= getRcvDataSize());

268 +

releaseNextFillerEntries();

269 +

if (needUpdateNonreadPos)

270 +

{

271 +

m_iFirstNonreadPos = m_iStartPos;

272 +

updateNonreadPos();

273 +

}

274 +

if (!m_tsbpd.isEnabled() && m_bMessageAPI)

275 +

{

276 +

if (!checkFirstReadableOutOfOrder())

277 +

m_iFirstReadableOutOfOrder = -1;

278 +

updateFirstReadableOutOfOrder();

279 +

}

249 280

}

250 281 251 282

int CRcvBufferNew::readMessage(char* data, size_t len, SRT_MSGCTRL* msgctrl)

@@ -720,6 +751,34 @@ void CRcvBufferNew::onInsertNotInOrderPacket(int insertPos)

720 751

return;

721 752

}

722 753 754 +

bool CRcvBufferNew::checkFirstReadableOutOfOrder()

755 +

{

756 +

if (m_numOutOfOrderPackets <= 0 || m_iFirstReadableOutOfOrder < 0 || m_iMaxPosInc == 0)

757 +

return false;

758 + 759 +

const int endPos = incPos(m_iStartPos, m_iMaxPosInc);

760 +

int msgno = -1;

761 +

for (int pos = m_iFirstReadableOutOfOrder; pos != endPos; pos = incPos(pos))

762 +

{

763 +

if (!m_entries[pos].pUnit)

764 +

return false;

765 + 766 +

const CPacket& pkt = m_entries[pos].pUnit->m_Packet;

767 +

if (pkt.getMsgOrderFlag())

768 +

return false;

769 + 770 +

if (msgno == -1)

771 +

msgno = pkt.getMsgSeq(m_bPeerRexmitFlag);

772 +

else if (msgno != pkt.getMsgSeq(m_bPeerRexmitFlag))

773 +

return false;

774 + 775 +

if (pkt.getMsgBoundary() & PB_LAST)

776 +

return true;

777 +

}

778 + 779 +

return false;

780 +

}

781 + 723 782

void CRcvBufferNew::updateFirstReadableOutOfOrder()

724 783

{

725 784

if (hasReadableInorderPkts() || m_numOutOfOrderPackets <= 0 || m_iFirstReadableOutOfOrder >= 0)


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