When Ulpfec recovers a packet, set |returned| flag earlier.

This avoids infinite recursion in case the recovered packet carries a
RED header.

BUG=chromium:754748

Review-Url: https://codereview.webrtc.org/3004553002
Cr-Original-Commit-Position: refs/heads/master@{#19525}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: 41476e014c8364adc15b90238d54a8aef91d7f56
diff --git a/modules/rtp_rtcp/source/ulpfec_receiver_impl.cc b/modules/rtp_rtcp/source/ulpfec_receiver_impl.cc
index b4ac30e..f3b0831 100644
--- a/modules/rtp_rtcp/source/ulpfec_receiver_impl.cc
+++ b/modules/rtp_rtcp/source/ulpfec_receiver_impl.cc
@@ -241,11 +241,13 @@
     }
     ForwardErrorCorrection::Packet* packet = recovered_packet->pkt;
     ++packet_counter_.num_recovered_packets;
+    // Set this flag first; in case the recovered packet carries a RED
+    // header, OnRecoveredPacket will recurse back here.
+    recovered_packet->returned = true;
     crit_sect_.Leave();
     recovered_packet_callback_->OnRecoveredPacket(packet->data,
                                                   packet->length);
     crit_sect_.Enter();
-    recovered_packet->returned = true;
   }
   crit_sect_.Leave();
   return 0;