fixed deadlock

This commit is contained in:
Grishka 2018-11-21 03:38:26 +03:00
parent 02f4835e31
commit cc0cf35725

View File

@ -3357,8 +3357,10 @@ void VoIPController::UpdateSignalBars(){
}
void VoIPController::UpdateQueuedPackets(){
vector<PendingOutgoingPacket> packetsToSend;
{
MutexGuard m(queuedPacketsMutex);
for(std::vector<QueuedPacket>::iterator qp=queuedPackets.begin();qp!=queuedPackets.end();){
for(std::vector<QueuedPacket>::iterator qp=queuedPackets.begin(); qp!=queuedPackets.end();){
if(qp->timeout>0 && qp->firstSentTime>0 && GetCurrentTime()-qp->firstSentTime>=qp->timeout){
LOGD("Removing queued packet because of timeout");
qp=queuedPackets.erase(qp);
@ -3375,7 +3377,7 @@ void VoIPController::UpdateQueuedPackets(){
qp->firstSentTime=qp->lastSentTime;
if(qp->data.Length())
buf.CopyFrom(qp->data, qp->data.Length());
SendOrEnqueuePacket(PendingOutgoingPacket{
packetsToSend.push_back(PendingOutgoingPacket{
/*.seq=*/seq,
/*.type=*/qp->type,
/*.len=*/qp->data.Length(),
@ -3385,6 +3387,10 @@ void VoIPController::UpdateQueuedPackets(){
}
++qp;
}
}
for(PendingOutgoingPacket& pkt:packetsToSend){
SendOrEnqueuePacket(move(pkt));
}
}
void VoIPController::SendNopPacket(){