Revert of Remove ignored return code from modules. (patchset #3 id:40001 of https://codereview.webrtc.org/1703833002/ )

Reason for revert:
Breaks Chromium.

Original issue's description:
> Remove ignored return code from modules.
>
> ModuleProcessImpl doesn't act on return codes and having them around is
> confusing (it's unclear what an error return code here would do even).
>
> BUG=
> R=tommi@webrtc.org
>
> Committed: https://chromium.googlesource.com/external/webrtc/+/f14c47a58cb2a333cb9b11aef593f0e632fdb28a

TBR=tommi@webrtc.org,pbos@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=

Review URL: https://codereview.webrtc.org/1736663004

Cr-Commit-Position: refs/heads/master@{#11761}
diff --git a/webrtc/api/test/fakeaudiocapturemodule.cc b/webrtc/api/test/fakeaudiocapturemodule.cc
index 0b6478e..b85f30b 100644
--- a/webrtc/api/test/fakeaudiocapturemodule.cc
+++ b/webrtc/api/test/fakeaudiocapturemodule.cc
@@ -85,8 +85,9 @@
   return kAdmMaxIdleTimeProcess - elapsed_time;
 }
 
-void FakeAudioCaptureModule::Process() {
+int32_t FakeAudioCaptureModule::Process() {
   last_process_time_ms_ = rtc::Time();
+  return 0;
 }
 
 int32_t FakeAudioCaptureModule::ActiveAudioLayer(
diff --git a/webrtc/api/test/fakeaudiocapturemodule.h b/webrtc/api/test/fakeaudiocapturemodule.h
index 9200bdf..c27d02d 100644
--- a/webrtc/api/test/fakeaudiocapturemodule.h
+++ b/webrtc/api/test/fakeaudiocapturemodule.h
@@ -56,7 +56,7 @@
   // nothing and return success. If a function is not expected to be called by
   // PeerConnection an assertion is triggered if it is in fact called.
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
   int32_t ActiveAudioLayer(AudioLayer* audio_layer) const override;
 
diff --git a/webrtc/api/test/fakeaudiocapturemodule_unittest.cc b/webrtc/api/test/fakeaudiocapturemodule_unittest.cc
index 2c5730a..1611b81 100644
--- a/webrtc/api/test/fakeaudiocapturemodule_unittest.cc
+++ b/webrtc/api/test/fakeaudiocapturemodule_unittest.cc
@@ -123,8 +123,8 @@
   // Next process call must be some time in the future (or now).
   EXPECT_LE(0, fake_audio_capture_module_->TimeUntilNextProcess());
   // Process call updates TimeUntilNextProcess() but there are no guarantees on
-  // timing so just check that Process can be called successfully.
-  fake_audio_capture_module_->Process();
+  // timing so just check that Process can ba called successfully.
+  EXPECT_LE(0, fake_audio_capture_module_->Process());
 }
 
 TEST_F(FakeAdmTest, PlayoutTest) {
diff --git a/webrtc/media/engine/fakewebrtcvideocapturemodule.h b/webrtc/media/engine/fakewebrtcvideocapturemodule.h
index 43f72b9..8c63d2b 100644
--- a/webrtc/media/engine/fakewebrtcvideocapturemodule.h
+++ b/webrtc/media/engine/fakewebrtcvideocapturemodule.h
@@ -30,7 +30,7 @@
         delay_(0) {
   }
   int64_t TimeUntilNextProcess() override { return 0; }
-  void Process() override {}
+  int32_t Process() override { return 0; }
   void RegisterCaptureDataCallback(
       webrtc::VideoCaptureDataCallback& callback) override {
     callback_ = &callback;
diff --git a/webrtc/modules/audio_conference_mixer/include/audio_conference_mixer.h b/webrtc/modules/audio_conference_mixer/include/audio_conference_mixer.h
index 7b14f2f..7370442 100644
--- a/webrtc/modules/audio_conference_mixer/include/audio_conference_mixer.h
+++ b/webrtc/modules/audio_conference_mixer/include/audio_conference_mixer.h
@@ -40,7 +40,7 @@
 
     // Module functions
     int64_t TimeUntilNextProcess() override = 0;
-    void Process() override = 0;
+    int32_t Process() override = 0;
 
     // Register/unregister a callback class for receiving the mixed audio.
     virtual int32_t RegisterMixedStreamCallback(
diff --git a/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc b/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc
index 1d76025..9411a9a 100644
--- a/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc
+++ b/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc
@@ -189,7 +189,7 @@
     return timeUntilNextProcess;
 }
 
-void AudioConferenceMixerImpl::Process() {
+int32_t AudioConferenceMixerImpl::Process() {
     size_t remainingParticipantsAllowedToMix =
         kMaximumAmountOfMixedParticipants;
     {
@@ -222,7 +222,7 @@
         if(lowFreq <= 0) {
             CriticalSectionScoped cs(_crit.get());
             _processCalls--;
-            return;
+            return 0;
         } else {
             switch(lowFreq) {
             case 8000:
@@ -250,7 +250,7 @@
 
                 CriticalSectionScoped cs(_crit.get());
                 _processCalls--;
-                return;
+                return -1;
             }
         }
 
@@ -267,9 +267,10 @@
         WEBRTC_TRACE(kTraceMemory, kTraceAudioMixerServer, _id,
                      "failed PopMemory() call");
         assert(false);
-        return;
+        return -1;
     }
 
+    int retval = 0;
     {
         CriticalSectionScoped cs(_crit.get());
 
@@ -303,7 +304,8 @@
             mixedAudio->Mute();
         } else {
             // Only call the limiter if we have something to mix.
-            LimitMixedAudio(mixedAudio);
+            if(!LimitMixedAudio(mixedAudio))
+                retval = -1;
         }
     }
 
@@ -328,7 +330,7 @@
         CriticalSectionScoped cs(_crit.get());
         _processCalls--;
     }
-    return;
+    return retval;
 }
 
 int32_t AudioConferenceMixerImpl::RegisterMixedStreamCallback(
diff --git a/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.h b/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.h
index 13d30c3..0fab84b 100644
--- a/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.h
+++ b/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.h
@@ -64,7 +64,7 @@
 
     // Module functions
     int64_t TimeUntilNextProcess() override;
-    void Process() override;
+    int32_t Process() override;
 
     // AudioConferenceMixer functions
     int32_t RegisterMixedStreamCallback(
diff --git a/webrtc/modules/audio_conference_mixer/test/audio_conference_mixer_unittest.cc b/webrtc/modules/audio_conference_mixer/test/audio_conference_mixer_unittest.cc
index f393e0f..293bfa0 100644
--- a/webrtc/modules/audio_conference_mixer/test/audio_conference_mixer_unittest.cc
+++ b/webrtc/modules/audio_conference_mixer/test/audio_conference_mixer_unittest.cc
@@ -145,7 +145,7 @@
   EXPECT_CALL(output_receiver, NewMixedAudio(_, _, _, _))
       .Times(AtLeast(1));
 
-  mixer->Process();
+  EXPECT_EQ(0, mixer->Process());
 
   for (int i = 0; i < kParticipants; ++i) {
     bool is_mixed = participants[i].IsMixed();
diff --git a/webrtc/modules/audio_device/audio_device_impl.cc b/webrtc/modules/audio_device/audio_device_impl.cc
index 6496f5ef..a11c496 100644
--- a/webrtc/modules/audio_device/audio_device_impl.cc
+++ b/webrtc/modules/audio_device/audio_device_impl.cc
@@ -427,7 +427,7 @@
 //  new reports exists.
 // ----------------------------------------------------------------------------
 
-void AudioDeviceModuleImpl::Process()
+int32_t AudioDeviceModuleImpl::Process()
 {
 
     _lastProcessTime = TickTime::MillisecondTimestamp();
@@ -479,6 +479,8 @@
         }
         _ptrAudioDevice->ClearRecordingError();
     }
+
+    return 0;
 }
 
 // ============================================================================
diff --git a/webrtc/modules/audio_device/audio_device_impl.h b/webrtc/modules/audio_device/audio_device_impl.h
index d7c48ab..c7312bf 100644
--- a/webrtc/modules/audio_device/audio_device_impl.h
+++ b/webrtc/modules/audio_device/audio_device_impl.h
@@ -45,7 +45,7 @@
   virtual ~AudioDeviceModuleImpl();
 
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
   // Factory methods (resource allocation/deallocation)
   static AudioDeviceModule* Create(
diff --git a/webrtc/modules/audio_device/include/fake_audio_device.h b/webrtc/modules/audio_device/include/fake_audio_device.h
index 45bf45c..8b15479 100644
--- a/webrtc/modules/audio_device/include/fake_audio_device.h
+++ b/webrtc/modules/audio_device/include/fake_audio_device.h
@@ -37,7 +37,7 @@
   virtual int32_t SetAGC(bool enable) { return 0; }
   virtual int32_t StopRecording() { return 0; }
   virtual int64_t TimeUntilNextProcess() { return 0; }
-  virtual void Process() {}
+  virtual int32_t Process() { return 0; }
   virtual int32_t Terminate() { return 0; }
 
   virtual int32_t ActiveAudioLayer(AudioLayer* audioLayer) const { return 0; }
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
index bf60878..72a5ff5 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc
@@ -162,15 +162,16 @@
       kBitrateControllerUpdateIntervalMs - time_since_update_ms, 0);
 }
 
-void BitrateControllerImpl::Process() {
+int32_t BitrateControllerImpl::Process() {
   if (TimeUntilNextProcess() > 0)
-    return;
+    return 0;
   {
     rtc::CritScope cs(&critsect_);
     bandwidth_estimation_.UpdateEstimate(clock_->TimeInMilliseconds());
   }
   MaybeTriggerOnNetworkChanged();
   last_bitrate_update_ms_ = clock_->TimeInMilliseconds();
+  return 0;
 }
 
 void BitrateControllerImpl::OnReceivedRtcpReceiverReport(
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
index da42b4c..74f3c14 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
@@ -45,7 +45,7 @@
   void SetEventLog(RtcEventLog* event_log) override;
 
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
  private:
   class RtcpBandwidthObserverImpl;
diff --git a/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h b/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h
index 45b596a..8748696 100644
--- a/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h
+++ b/webrtc/modules/bitrate_controller/include/mock/mock_bitrate_controller.h
@@ -36,7 +36,7 @@
   MOCK_CONST_METHOD1(AvailableBandwidth, bool(uint32_t* bandwidth));
   MOCK_METHOD1(SetReservedBitrate, void(uint32_t reserved_bitrate_bps));
 
-  MOCK_METHOD0(Process, void());
+  MOCK_METHOD0(Process, int());
   MOCK_METHOD0(TimeUntilNextProcess, int64_t());
 };
 }  // namespace test
diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/congestion_controller.cc
index f9e7e01..50074d5 100644
--- a/webrtc/modules/congestion_controller/congestion_controller.cc
+++ b/webrtc/modules/congestion_controller/congestion_controller.cc
@@ -53,9 +53,9 @@
     rbe_->IncomingPacket(arrival_time_ms, payload_size, header, was_paced);
   }
 
-  void Process() override {
+  int32_t Process() override {
     CriticalSectionScoped cs(crit_sect_.get());
-    rbe_->Process();
+    return rbe_->Process();
   }
 
   int64_t TimeUntilNextProcess() override {
@@ -241,9 +241,10 @@
                   remote_bitrate_estimator_->TimeUntilNextProcess());
 }
 
-void CongestionController::Process() {
+int32_t CongestionController::Process() {
   bitrate_controller_->Process();
   remote_bitrate_estimator_->Process();
+  return 0;
 }
 
 }  // namespace webrtc
diff --git a/webrtc/modules/congestion_controller/include/congestion_controller.h b/webrtc/modules/congestion_controller/include/congestion_controller.h
index 2c0b2e3..f4381e2 100644
--- a/webrtc/modules/congestion_controller/include/congestion_controller.h
+++ b/webrtc/modules/congestion_controller/include/congestion_controller.h
@@ -65,7 +65,7 @@
 
   // Implements Module.
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
  private:
   Clock* const clock_;
diff --git a/webrtc/modules/include/module.h b/webrtc/modules/include/module.h
index 432ed40..d02aa95 100644
--- a/webrtc/modules/include/module.h
+++ b/webrtc/modules/include/module.h
@@ -32,7 +32,7 @@
 
   // Process any pending tasks such as timeouts.
   // Called on a worker thread.
-  virtual void Process() = 0;
+  virtual int32_t Process() = 0;
 
   // This method is called when the module is attached to a *running* process
   // thread or detached from one.  In the case of detaching, |process_thread|
diff --git a/webrtc/modules/media_file/media_file_impl.cc b/webrtc/modules/media_file/media_file_impl.cc
index 76bcca7..abc7b9d 100644
--- a/webrtc/modules/media_file/media_file_impl.cc
+++ b/webrtc/modules/media_file/media_file_impl.cc
@@ -95,10 +95,11 @@
     return -1;
 }
 
-void MediaFileImpl::Process()
+int32_t MediaFileImpl::Process()
 {
     WEBRTC_TRACE(kTraceWarning, kTraceFile, _id,
                  "Process: This method is not used by MediaFile class.");
+    return -1;
 }
 
 int32_t MediaFileImpl::PlayoutAudioData(int8_t* buffer,
diff --git a/webrtc/modules/media_file/media_file_impl.h b/webrtc/modules/media_file/media_file_impl.h
index 677098e..c23f514 100644
--- a/webrtc/modules/media_file/media_file_impl.h
+++ b/webrtc/modules/media_file/media_file_impl.h
@@ -26,7 +26,7 @@
     MediaFileImpl(const int32_t id);
     ~MediaFileImpl();
 
-    void Process() override;
+    int32_t Process() override;
     int64_t TimeUntilNextProcess() override;
 
     // MediaFile functions
diff --git a/webrtc/modules/pacing/paced_sender.cc b/webrtc/modules/pacing/paced_sender.cc
index 6998650..c32d365 100644
--- a/webrtc/modules/pacing/paced_sender.cc
+++ b/webrtc/modules/pacing/paced_sender.cc
@@ -373,7 +373,7 @@
   return std::max<int64_t>(kMinPacketLimitMs - elapsed_time_ms, 0);
 }
 
-void PacedSender::Process() {
+int32_t PacedSender::Process() {
   int64_t now_us = clock_->TimeInMicroseconds();
   CriticalSectionScoped cs(critsect_.get());
   int64_t elapsed_time_ms = (now_us - time_last_update_us_ + 500) / 1000;
@@ -402,7 +402,7 @@
   }
   while (!packets_->Empty()) {
     if (media_budget_->bytes_remaining() == 0 && !prober_->IsProbing())
-      return;
+      return 0;
 
     // Since we need to release the lock in order to send, we first pop the
     // element from the priority queue but keep it in storage, so that we can
@@ -413,17 +413,17 @@
       // Send succeeded, remove it from the queue.
       packets_->FinalizePop(packet);
       if (prober_->IsProbing())
-        return;
+        return 0;
     } else {
       // Send failed, put it back into the queue.
       packets_->CancelPop(packet);
-      return;
+      return 0;
     }
   }
 
   // TODO(holmer): Remove the paused_ check when issue 5307 has been fixed.
   if (paused_ || !packets_->Empty())
-    return;
+    return 0;
 
   size_t padding_needed;
   if (prober_->IsProbing()) {
@@ -434,6 +434,7 @@
 
   if (padding_needed > 0)
     SendPadding(static_cast<size_t>(padding_needed));
+  return 0;
 }
 
 bool PacedSender::SendPacket(const paced_sender::Packet& packet) {
diff --git a/webrtc/modules/pacing/paced_sender.h b/webrtc/modules/pacing/paced_sender.h
index e2c757d..62e794f 100644
--- a/webrtc/modules/pacing/paced_sender.h
+++ b/webrtc/modules/pacing/paced_sender.h
@@ -122,7 +122,7 @@
   int64_t TimeUntilNextProcess() override;
 
   // Process any pending packets in the queue(s).
-  void Process() override;
+  int32_t Process() override;
 
  private:
   // Updates the number of bytes that can be sent for the next time interval.
diff --git a/webrtc/modules/pacing/paced_sender_unittest.cc b/webrtc/modules/pacing/paced_sender_unittest.cc
index 2c13833..70ffc75 100644
--- a/webrtc/modules/pacing/paced_sender_unittest.cc
+++ b/webrtc/modules/pacing/paced_sender_unittest.cc
@@ -222,12 +222,12 @@
         .Times(3)
         .WillRepeatedly(Return(true));
     EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-    send_bucket_->Process();
+    EXPECT_EQ(0, send_bucket_->Process());
   }
   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
   clock_.AdvanceTimeMilliseconds(5);
   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-  send_bucket_->Process();
+  EXPECT_EQ(0, send_bucket_->Process());
   SendAndExpectPacket(PacedSender::kNormalPriority,
                       ssrc,
                       sequence_number++,
@@ -290,12 +290,12 @@
           .WillRepeatedly(Return(true));
     }
     EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-    send_bucket_->Process();
+    EXPECT_EQ(0, send_bucket_->Process());
   }
   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
   clock_.AdvanceTimeMilliseconds(5);
   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-  send_bucket_->Process();
+  EXPECT_EQ(0, send_bucket_->Process());
   SendAndExpectPacket(PacedSender::kNormalPriority,
                       ssrc,
                       sequence_number++,
@@ -373,7 +373,7 @@
   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
   clock_.AdvanceTimeMilliseconds(5);
   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-  send_bucket_->Process();
+  EXPECT_EQ(0, send_bucket_->Process());
 
   // 5 milliseconds later we have enough budget to send some padding.
   EXPECT_CALL(callback_, TimeToSendPadding(250)).Times(1).
@@ -381,7 +381,7 @@
   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
   clock_.AdvanceTimeMilliseconds(5);
   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-  send_bucket_->Process();
+  EXPECT_EQ(0, send_bucket_->Process());
 }
 
 TEST_F(PacedSenderTest, VerifyPaddingUpToBitrate) {
@@ -486,7 +486,7 @@
   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
   clock_.AdvanceTimeMilliseconds(5);
   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-  send_bucket_->Process();
+  EXPECT_EQ(0, send_bucket_->Process());
 
   EXPECT_CALL(callback_,
               TimeToSendPacket(
@@ -497,7 +497,7 @@
   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
   clock_.AdvanceTimeMilliseconds(5);
   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-  send_bucket_->Process();
+  EXPECT_EQ(0, send_bucket_->Process());
 }
 
 TEST_F(PacedSenderTest, HighPrioDoesntAffectBudget) {
@@ -587,7 +587,7 @@
   for (int i = 0; i < 10; ++i) {
     clock_.AdvanceTimeMilliseconds(5);
     EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-    send_bucket_->Process();
+    EXPECT_EQ(0, send_bucket_->Process());
   }
   // Expect high prio packets to come out first followed by all packets in the
   // way they were added.
@@ -602,7 +602,7 @@
   EXPECT_EQ(5, send_bucket_->TimeUntilNextProcess());
   clock_.AdvanceTimeMilliseconds(5);
   EXPECT_EQ(0, send_bucket_->TimeUntilNextProcess());
-  send_bucket_->Process();
+  EXPECT_EQ(0, send_bucket_->Process());
 
   EXPECT_EQ(0, send_bucket_->QueueInMs());
 }
diff --git a/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h b/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h
index 2c35df8..588e1e7 100644
--- a/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h
+++ b/webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitrate_estimator.h
@@ -37,7 +37,7 @@
 
   // From Module.
   MOCK_METHOD0(TimeUntilNextProcess, int64_t());
-  MOCK_METHOD0(Process, void());
+  MOCK_METHOD0(Process, int32_t());
   MOCK_METHOD1(SetMinBitrate, void(int));
 };
 
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc
index bf3fdc2..db54cab 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc
@@ -333,7 +333,9 @@
   }
 }
 
-void RemoteBitrateEstimatorAbsSendTime::Process() {}
+int32_t RemoteBitrateEstimatorAbsSendTime::Process() {
+  return 0;
+}
 
 int64_t RemoteBitrateEstimatorAbsSendTime::TimeUntilNextProcess() {
   const int64_t kDisabledModuleTime = 1000;
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h
index 39d3e03..69b7773 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h
@@ -82,7 +82,7 @@
   // every other second) for streams to be timed out properly. Therefore it
   // shouldn't be detached from the ProcessThread except if it's about to be
   // deleted.
-  void Process() override;
+  int32_t Process() override;
   int64_t TimeUntilNextProcess() override;
   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
   void RemoveStream(uint32_t ssrc) override;
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
index 7d39b03..c1a4988 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time_unittest.cc
@@ -93,10 +93,10 @@
   IncomingPacket(0, 1000, clock_.TimeInMilliseconds(), 0, 0, true);
   clock_.AdvanceTimeMilliseconds(kStreamTimeOutMs + 1);
   // Trigger timeout.
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   clock_.AdvanceTimeMilliseconds(kProcessIntervalMs);
   // This shouldn't crash.
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
 }
 
 TEST_F(RemoteBitrateEstimatorAbsSendTimeTest, TestProbeDetection) {
@@ -118,7 +118,7 @@
                    true);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_TRUE(bitrate_observer_->updated());
   EXPECT_GT(bitrate_observer_->latest_bitrate(), 1500000u);
 }
@@ -140,7 +140,7 @@
                    false);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_TRUE(bitrate_observer_->updated());
   EXPECT_GT(bitrate_observer_->latest_bitrate(), 800000u);
 }
@@ -171,7 +171,7 @@
                    AbsSendTime(send_time_ms, 1000), true);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_TRUE(bitrate_observer_->updated());
   EXPECT_NEAR(bitrate_observer_->latest_bitrate(), 800000u, 10000);
 }
@@ -191,7 +191,7 @@
                    AbsSendTime(send_time_ms, 1000), true);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_TRUE(bitrate_observer_->updated());
   EXPECT_GT(bitrate_observer_->latest_bitrate(), 800000u);
 }
@@ -210,7 +210,7 @@
                    AbsSendTime(send_time_ms, 1000), true);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_FALSE(bitrate_observer_->updated());
 }
 
@@ -228,7 +228,7 @@
                    AbsSendTime(send_time_ms, 1000), true);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_TRUE(bitrate_observer_->updated());
   EXPECT_NEAR(bitrate_observer_->latest_bitrate(), 1140000, 10000);
 }
@@ -248,7 +248,7 @@
                    AbsSendTime(send_time_ms, 1000), true);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_TRUE(bitrate_observer_->updated());
   EXPECT_NEAR(bitrate_observer_->latest_bitrate(), 4000000u, 10000);
 }
@@ -265,7 +265,7 @@
                    true);
   }
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_FALSE(bitrate_observer_->updated());
 
   // Followed by a probe with 1000 bytes packets, should be detected as a
@@ -280,7 +280,7 @@
   // Wait long enough so that we can call Process again.
   clock_.AdvanceTimeMilliseconds(1000);
 
-  bitrate_estimator_->Process();
+  EXPECT_EQ(0, bitrate_estimator_->Process());
   EXPECT_TRUE(bitrate_observer_->updated());
   EXPECT_NEAR(bitrate_observer_->latest_bitrate(), 800000u, 10000);
 }
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc
index 9a1bbc1..2b74043 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc
@@ -118,15 +118,16 @@
   }
 }
 
-void RemoteBitrateEstimatorSingleStream::Process() {
+int32_t RemoteBitrateEstimatorSingleStream::Process() {
   if (TimeUntilNextProcess() > 0) {
-    return;
+    return 0;
   }
   {
     CriticalSectionScoped cs(crit_sect_.get());
     UpdateEstimate(clock_->TimeInMilliseconds());
   }
   last_process_time_ = clock_->TimeInMilliseconds();
+  return 0;
 }
 
 int64_t RemoteBitrateEstimatorSingleStream::TimeUntilNextProcess() {
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h
index f3a208a..001311b 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h
+++ b/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h
@@ -31,7 +31,7 @@
                       size_t payload_size,
                       const RTPHeader& header,
                       bool was_paced) override;
-  void Process() override;
+  int32_t Process() override;
   int64_t TimeUntilNextProcess() override;
   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override;
   void RemoveStream(uint32_t ssrc) override;
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
index eace9fc..1703a27 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
+++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc
@@ -71,9 +71,9 @@
   return time_until_next;
 }
 
-void RemoteEstimatorProxy::Process() {
+int32_t RemoteEstimatorProxy::Process() {
   if (TimeUntilNextProcess() > 0)
-    return;
+    return 0;
   last_process_time_ms_ = clock_->TimeInMilliseconds();
 
   bool more_to_build = true;
@@ -86,6 +86,8 @@
       more_to_build = false;
     }
   }
+
+  return 0;
 }
 
 void RemoteEstimatorProxy::OnPacketArrival(uint16_t sequence_number,
diff --git a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h
index 93d5244..7145543 100644
--- a/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h
+++ b/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.h
@@ -47,7 +47,7 @@
   void OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) override {}
   void SetMinBitrate(int min_bitrate_bps) override {}
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
   static const int kDefaultProcessIntervalMs;
   static const int kBackWindowMs;
diff --git a/webrtc/modules/remote_bitrate_estimator/test/bwe.cc b/webrtc/modules/remote_bitrate_estimator/test/bwe.cc
index 5e282c6..c667b68 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/bwe.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/bwe.cc
@@ -67,7 +67,7 @@
   int64_t TimeUntilNextProcess() override {
     return std::numeric_limits<int64_t>::max();
   }
-  void Process() override {}
+  int Process() override { return 0; }
 
  private:
   RTC_DISALLOW_COPY_AND_ASSIGN(NullBweSender);
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc b/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc
index b91ee6d..066b4b5 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.cc
@@ -238,7 +238,8 @@
   return 100;
 }
 
-void NadaBweSender::Process() {
+int NadaBweSender::Process() {
+  return 0;
 }
 
 void NadaBweSender::AcceleratedRampUp(const NadaFeedback& fb) {
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.h b/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.h
index ab45416..bf23d09 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.h
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/nada.h
@@ -71,7 +71,7 @@
   void GiveFeedback(const FeedbackPacket& feedback) override;
   void OnPacketsSent(const Packets& packets) override {}
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int Process() override;
   void AcceleratedRampUp(const NadaFeedback& fb);
   void AcceleratedRampDown(const NadaFeedback& fb);
   void GradualRateUpdate(const NadaFeedback& fb,
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc b/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc
index d469e67..3f049df 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.cc
@@ -53,8 +53,8 @@
   return bitrate_controller_->TimeUntilNextProcess();
 }
 
-void RembBweSender::Process() {
-  bitrate_controller_->Process();
+int RembBweSender::Process() {
+  return bitrate_controller_->Process();
 }
 
 int RembBweSender::GetFeedbackIntervalMs() const {
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.h b/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.h
index 058873e..c6fddf7 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.h
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/remb.h
@@ -35,7 +35,7 @@
   void GiveFeedback(const FeedbackPacket& feedback) override;
   void OnPacketsSent(const Packets& packets) override {}
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int Process() override;
 
  protected:
   rtc::scoped_ptr<BitrateController> bitrate_controller_;
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
index 36dff1f..c55bb1a 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.cc
@@ -110,9 +110,9 @@
   return bitrate_controller_->TimeUntilNextProcess();
 }
 
-void FullBweSender::Process() {
+int FullBweSender::Process() {
   rbe_->Process();
-  bitrate_controller_->Process();
+  return bitrate_controller_->Process();
 }
 
 SendSideBweReceiver::SendSideBweReceiver(int flow_id)
diff --git a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.h b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.h
index 9832eb2..57d0432 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.h
+++ b/webrtc/modules/remote_bitrate_estimator/test/estimators/send_side.h
@@ -31,7 +31,7 @@
   void OnReceiveBitrateChanged(const std::vector<uint32_t>& ssrcs,
                                uint32_t bitrate) override;
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int Process() override;
 
  protected:
   rtc::scoped_ptr<BitrateController> bitrate_controller_;
diff --git a/webrtc/modules/rtp_rtcp/include/receive_statistics.h b/webrtc/modules/rtp_rtcp/include/receive_statistics.h
index cc21e22..b4a7cd0 100644
--- a/webrtc/modules/rtp_rtcp/include/receive_statistics.h
+++ b/webrtc/modules/rtp_rtcp/include/receive_statistics.h
@@ -90,7 +90,7 @@
   StatisticianMap GetActiveStatisticians() const override;
   StreamStatistician* GetStatistician(uint32_t ssrc) const override;
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
   void SetMaxReorderingThreshold(int max_reordering_threshold) override;
   void RegisterRtcpStatisticsCallback(
       RtcpStatisticsCallback* callback) override;
diff --git a/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h b/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
index d4d6e14..796be13 100644
--- a/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
+++ b/webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
@@ -249,7 +249,7 @@
   MOCK_METHOD0(TimeUntilNextProcess,
         int64_t());
   MOCK_METHOD0(Process,
-        void());
+        int32_t());
   MOCK_METHOD1(RegisterSendFrameCountObserver,
       void(FrameCountObserver*));
   MOCK_CONST_METHOD0(GetSendFrameCountObserver,
diff --git a/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.cc b/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.cc
index 022fc96..24f1e2c 100644
--- a/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.cc
+++ b/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.cc
@@ -454,13 +454,14 @@
   }
 }
 
-void ReceiveStatisticsImpl::Process() {
+int32_t ReceiveStatisticsImpl::Process() {
   CriticalSectionScoped cs(receive_statistics_lock_.get());
   for (StatisticianImplMap::iterator it = statisticians_.begin();
        it != statisticians_.end(); ++it) {
     it->second->ProcessBitrate();
   }
   last_rate_update_ms_ = clock_->TimeInMilliseconds();
+  return 0;
 }
 
 int64_t ReceiveStatisticsImpl::TimeUntilNextProcess() {
@@ -529,7 +530,7 @@
 
 int64_t NullReceiveStatistics::TimeUntilNextProcess() { return 0; }
 
-void NullReceiveStatistics::Process() {}
+int32_t NullReceiveStatistics::Process() { return 0; }
 
 void NullReceiveStatistics::RegisterRtcpStatisticsCallback(
     RtcpStatisticsCallback* callback) {}
diff --git a/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.h b/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.h
index 6da8334..025dcd4 100644
--- a/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.h
+++ b/webrtc/modules/rtp_rtcp/source/receive_statistics_impl.h
@@ -112,7 +112,7 @@
   void SetMaxReorderingThreshold(int max_reordering_threshold) override;
 
   // Implement Module.
-  void Process() override;
+  int32_t Process() override;
   int64_t TimeUntilNextProcess() override;
 
   void RegisterRtcpStatisticsCallback(
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 7f33bc2..07889f9 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -118,7 +118,7 @@
 }
 
 // Process any pending tasks such as timeouts (non time critical events).
-void ModuleRtpRtcpImpl::Process() {
+int32_t ModuleRtpRtcpImpl::Process() {
   const int64_t now = clock_->TimeInMilliseconds();
   last_process_time_ = now;
 
@@ -202,6 +202,7 @@
     // A receiver has timed out
     rtcp_receiver_.UpdateTMMBR();
   }
+  return 0;
 }
 
 void ModuleRtpRtcpImpl::SetRtxSendStatus(int mode) {
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
index 8c211e4..3621f9b 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
+++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.h
@@ -35,7 +35,7 @@
   int64_t TimeUntilNextProcess() override;
 
   // Process any pending tasks such as timeouts.
-  void Process() override;
+  int32_t Process() override;
 
   // Receiver part.
 
diff --git a/webrtc/modules/utility/source/process_thread_impl_unittest.cc b/webrtc/modules/utility/source/process_thread_impl_unittest.cc
index 4f70e8a..0b35fad 100644
--- a/webrtc/modules/utility/source/process_thread_impl_unittest.cc
+++ b/webrtc/modules/utility/source/process_thread_impl_unittest.cc
@@ -28,7 +28,7 @@
 class MockModule : public Module {
  public:
   MOCK_METHOD0(TimeUntilNextProcess, int64_t());
-  MOCK_METHOD0(Process, void());
+  MOCK_METHOD0(Process, int32_t());
   MOCK_METHOD1(ProcessThreadAttached, void(ProcessThread*));
 };
 
@@ -77,8 +77,8 @@
   MockModule module;
   EXPECT_CALL(module, TimeUntilNextProcess()).WillRepeatedly(Return(0));
   EXPECT_CALL(module, Process())
-      .WillOnce(DoAll(SetEvent(event.get()), Return()))
-      .WillRepeatedly(Return());
+      .WillOnce(DoAll(SetEvent(event.get()), Return(0)))
+      .WillRepeatedly(Return(0));
   EXPECT_CALL(module, ProcessThreadAttached(&thread)).Times(1);
 
   thread.RegisterModule(&module);
@@ -97,8 +97,8 @@
   MockModule module;
   EXPECT_CALL(module, TimeUntilNextProcess()).WillRepeatedly(Return(0));
   EXPECT_CALL(module, Process())
-      .WillOnce(DoAll(SetEvent(event.get()), Return()))
-      .WillRepeatedly(Return());
+      .WillOnce(DoAll(SetEvent(event.get()), Return(0)))
+      .WillRepeatedly(Return(0));
 
   thread.RegisterModule(&module);
 
@@ -122,8 +122,8 @@
   EXPECT_CALL(module, Process())
       .WillOnce(DoAll(SetEvent(event.get()),
                       Increment(&process_count),
-                      Return()))
-      .WillRepeatedly(DoAll(Increment(&process_count), Return()));
+                      Return(0)))
+      .WillRepeatedly(DoAll(Increment(&process_count), Return(0)));
 
   thread.RegisterModule(&module);
 
@@ -163,8 +163,8 @@
   EXPECT_CALL(module, Process())
       .WillOnce(DoAll(SetTimestamp(&called_time),
                       SetEvent(event.get()),
-                      Return()))
-      .WillRepeatedly(Return());
+                      Return(0)))
+      .WillRepeatedly(Return(0));
 
   EXPECT_CALL(module, ProcessThreadAttached(&thread)).Times(1);
   thread.RegisterModule(&module);
@@ -225,7 +225,7 @@
       .WillRepeatedly(Return(20));
   EXPECT_CALL(module, Process())
       .WillRepeatedly(DoAll(Increment(&callback_count),
-                            Return()));
+                            Return(0)));
 
   EXPECT_CALL(module, ProcessThreadAttached(&thread)).Times(1);
   thread.RegisterModule(&module);
@@ -269,9 +269,10 @@
                       Return(1000)))
       .WillOnce(Return(1000));
   EXPECT_CALL(module, Process())
-      .WillOnce(
-          DoAll(SetTimestamp(&called_time), SetEvent(called.get()), Return()))
-      .WillRepeatedly(Return());
+      .WillOnce(DoAll(SetTimestamp(&called_time),
+                      SetEvent(called.get()),
+                      Return(0)))
+      .WillRepeatedly(Return(0));
 
   EXPECT_CALL(module, ProcessThreadAttached(&thread)).Times(1);
   thread.RegisterModule(&module);
diff --git a/webrtc/modules/video_capture/video_capture_impl.cc b/webrtc/modules/video_capture/video_capture_impl.cc
index 3013a7d..90730cd 100644
--- a/webrtc/modules/video_capture/video_capture_impl.cc
+++ b/webrtc/modules/video_capture/video_capture_impl.cc
@@ -93,7 +93,7 @@
 }
 
 // Process any pending tasks such as timeouts
-void VideoCaptureImpl::Process()
+int32_t VideoCaptureImpl::Process()
 {
     CriticalSectionScoped cs(&_callBackCs);
 
@@ -136,6 +136,8 @@
     }
 
     _lastProcessFrameCount = _incomingFrameTimes[0];
+
+    return 0;
 }
 
 VideoCaptureImpl::VideoCaptureImpl(const int32_t id)
diff --git a/webrtc/modules/video_capture/video_capture_impl.h b/webrtc/modules/video_capture/video_capture_impl.h
index 4aa3939..1644217 100644
--- a/webrtc/modules/video_capture/video_capture_impl.h
+++ b/webrtc/modules/video_capture/video_capture_impl.h
@@ -79,7 +79,7 @@
 
     // Module handling
     virtual int64_t TimeUntilNextProcess();
-    virtual void Process();
+    virtual int32_t Process();
 
     // Implement VideoCaptureExternal
     // |capture_time| must be specified in NTP time format in milliseconds.
diff --git a/webrtc/modules/video_coding/test/vcm_payload_sink_factory.cc b/webrtc/modules/video_coding/test/vcm_payload_sink_factory.cc
index 88242fd..c9ec372 100644
--- a/webrtc/modules/video_coding/test/vcm_payload_sink_factory.cc
+++ b/webrtc/modules/video_coding/test/vcm_payload_sink_factory.cc
@@ -74,7 +74,9 @@
 
   bool Process() {
     if (vcm_->TimeUntilNextProcess() <= 0) {
-      vcm_->Process();
+      if (vcm_->Process() < 0) {
+        return false;
+      }
     }
     return true;
   }
diff --git a/webrtc/modules/video_coding/video_coding_impl.cc b/webrtc/modules/video_coding/video_coding_impl.cc
index 7d6d177..7f74b41 100644
--- a/webrtc/modules/video_coding/video_coding_impl.cc
+++ b/webrtc/modules/video_coding/video_coding_impl.cc
@@ -94,9 +94,12 @@
     return VCM_MIN(sender_time, receiver_time);
   }
 
-  void Process() override {
-    sender_.Process();
-    receiver_.Process();
+  int32_t Process() override {
+    int32_t sender_return = sender_.Process();
+    int32_t receiver_return = receiver_.Process();
+    if (sender_return != VCM_OK)
+      return sender_return;
+    return receiver_return;
   }
 
   int32_t RegisterSendCodec(const VideoCodec* sendCodec,
diff --git a/webrtc/modules/video_coding/video_coding_impl.h b/webrtc/modules/video_coding/video_coding_impl.h
index dc766b1..581ab0e 100644
--- a/webrtc/modules/video_coding/video_coding_impl.h
+++ b/webrtc/modules/video_coding/video_coding_impl.h
@@ -93,7 +93,7 @@
   bool VideoSuspended() const;
 
   int64_t TimeUntilNextProcess();
-  void Process();
+  int32_t Process();
 
  private:
   void SetEncoderParameters(EncoderParameters params)
@@ -172,7 +172,7 @@
   int32_t SetVideoProtection(VCMVideoProtection videoProtection, bool enable);
 
   int64_t TimeUntilNextProcess();
-  void Process();
+  int32_t Process();
 
   void RegisterPreDecodeImageCallback(EncodedImageCallback* observer);
   void TriggerDecoderShutdown();
diff --git a/webrtc/modules/video_coding/video_coding_robustness_unittest.cc b/webrtc/modules/video_coding/video_coding_robustness_unittest.cc
index eb5d485..51cffcd 100644
--- a/webrtc/modules/video_coding/video_coding_robustness_unittest.cc
+++ b/webrtc/modules/video_coding/video_coding_robustness_unittest.cc
@@ -113,20 +113,20 @@
 
   clock_->AdvanceTimeMilliseconds(10);
 
-  vcm_->Process();
+  ASSERT_EQ(VCM_OK, vcm_->Process());
 
   ASSERT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
 
   InsertPacket(6000, 8, false, true, kVideoFrameDelta);
   clock_->AdvanceTimeMilliseconds(10);
-  vcm_->Process();
+  ASSERT_EQ(VCM_OK, vcm_->Process());
 
   ASSERT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
 
   InsertPacket(6000, 6, true, false, kVideoFrameDelta);
   InsertPacket(6000, 7, false, false, kVideoFrameDelta);
   clock_->AdvanceTimeMilliseconds(10);
-  vcm_->Process();
+  ASSERT_EQ(VCM_OK, vcm_->Process());
 
   ASSERT_EQ(VCM_OK, vcm_->Decode(0));
 }
@@ -143,12 +143,12 @@
   InsertPacket(3000, 5, false, true, kVideoFrameDelta);
 
   EXPECT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-  vcm_->Process();
+  ASSERT_EQ(VCM_OK, vcm_->Process());
 
   clock_->AdvanceTimeMilliseconds(10);
 
   EXPECT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-  vcm_->Process();
+  ASSERT_EQ(VCM_OK, vcm_->Process());
 }
 
 TEST_F(VCMRobustnessTest, TestModeNoneWithErrors) {
@@ -195,25 +195,25 @@
   InsertPacket(0, 1, false, false, kVideoFrameKey);
   InsertPacket(0, 2, false, true, kVideoFrameKey);
   EXPECT_EQ(VCM_OK, vcm_->Decode(33));  // Decode timestamp 0.
-  vcm_->Process();
+  EXPECT_EQ(VCM_OK, vcm_->Process());   // Expect no NACK list.
 
   clock_->AdvanceTimeMilliseconds(33);
   InsertPacket(3000, 3, true, false, kVideoFrameDelta);
   // Packet 4 missing
   InsertPacket(3000, 5, false, true, kVideoFrameDelta);
   EXPECT_EQ(VCM_FRAME_NOT_READY, vcm_->Decode(0));
-  vcm_->Process();
+  EXPECT_EQ(VCM_OK, vcm_->Process());  // Expect no NACK list.
 
   clock_->AdvanceTimeMilliseconds(33);
   InsertPacket(6000, 6, true, false, kVideoFrameDelta);
   InsertPacket(6000, 7, false, false, kVideoFrameDelta);
   InsertPacket(6000, 8, false, true, kVideoFrameDelta);
   EXPECT_EQ(VCM_OK, vcm_->Decode(0));  // Decode timestamp 3000 incomplete.
-  vcm_->Process();
+  EXPECT_EQ(VCM_OK, vcm_->Process());  // Expect no NACK list.
 
   clock_->AdvanceTimeMilliseconds(10);
   EXPECT_EQ(VCM_OK, vcm_->Decode(23));  // Decode timestamp 6000 complete.
-  vcm_->Process();
+  EXPECT_EQ(VCM_OK, vcm_->Process());   // Expect no NACK list.
 
   clock_->AdvanceTimeMilliseconds(23);
   InsertPacket(3000, 4, false, false, kVideoFrameDelta);
diff --git a/webrtc/modules/video_coding/video_receiver.cc b/webrtc/modules/video_coding/video_receiver.cc
index e7844d0..02d51a7 100644
--- a/webrtc/modules/video_coding/video_receiver.cc
+++ b/webrtc/modules/video_coding/video_receiver.cc
@@ -63,7 +63,9 @@
 #endif
 }
 
-void VideoReceiver::Process() {
+int32_t VideoReceiver::Process() {
+  int32_t returnValue = VCM_OK;
+
   // Receive-side statistics
   if (_receiveStatsTimer.TimeUntilProcess() == 0) {
     _receiveStatsTimer.Processed();
@@ -106,8 +108,12 @@
       CriticalSectionScoped cs(process_crit_sect_.get());
       request_key_frame = _scheduleKeyRequest && _frameTypeCallback != NULL;
     }
-    if (request_key_frame)
-      RequestKeyFrame();
+    if (request_key_frame) {
+      const int32_t ret = RequestKeyFrame();
+      if (ret != VCM_OK && returnValue == VCM_OK) {
+        returnValue = ret;
+      }
+    }
   }
 
   // Packet retransmission requests
@@ -129,6 +135,9 @@
       int32_t ret = VCM_OK;
       if (request_key_frame) {
         ret = RequestKeyFrame();
+        if (ret != VCM_OK && returnValue == VCM_OK) {
+          returnValue = ret;
+        }
       }
       if (ret == VCM_OK && !nackList.empty()) {
         CriticalSectionScoped cs(process_crit_sect_.get());
@@ -138,6 +147,8 @@
       }
     }
   }
+
+  return returnValue;
 }
 
 int64_t VideoReceiver::TimeUntilNextProcess() {
diff --git a/webrtc/modules/video_coding/video_receiver_unittest.cc b/webrtc/modules/video_coding/video_receiver_unittest.cc
index 693fdc6..820ce9a 100644
--- a/webrtc/modules/video_coding/video_receiver_unittest.cc
+++ b/webrtc/modules/video_coding/video_receiver_unittest.cc
@@ -52,7 +52,7 @@
       EXPECT_EQ(0, receiver_->IncomingPacket(payload, 0, *header));
       ++header->header.sequenceNumber;
     }
-    receiver_->Process();
+    EXPECT_EQ(0, receiver_->Process());
     EXPECT_CALL(decoder_, Decode(_, _, _, _, _)).Times(0);
     EXPECT_EQ(VCM_FRAME_NOT_READY, receiver_->Decode(100));
   }
@@ -64,7 +64,7 @@
     EXPECT_EQ(0, receiver_->IncomingPacket(payload, length, *header));
     ++header->header.sequenceNumber;
     EXPECT_CALL(packet_request_callback_, ResendPackets(_, _)).Times(0);
-    receiver_->Process();;
+    EXPECT_EQ(0, receiver_->Process());
     EXPECT_CALL(decoder_, Decode(_, _, _, _, _)).Times(1);
     EXPECT_EQ(0, receiver_->Decode(100));
   }
diff --git a/webrtc/modules/video_coding/video_sender.cc b/webrtc/modules/video_coding/video_sender.cc
index d92ad45..f14f852 100644
--- a/webrtc/modules/video_coding/video_sender.cc
+++ b/webrtc/modules/video_coding/video_sender.cc
@@ -53,7 +53,9 @@
 
 VideoSender::~VideoSender() {}
 
-void VideoSender::Process() {
+int32_t VideoSender::Process() {
+  int32_t returnValue = VCM_OK;
+
   if (_sendStatsTimer.TimeUntilProcess() == 0) {
     _sendStatsTimer.Processed();
     CriticalSectionScoped cs(process_crit_sect_.get());
@@ -70,6 +72,8 @@
     // updated even if bandwidth hasn't changed.
     encoder_params_.input_frame_rate = _mediaOpt.InputFrameRate();
   }
+
+  return returnValue;
 }
 
 int64_t VideoSender::TimeUntilNextProcess() {
diff --git a/webrtc/modules/video_render/video_render.h b/webrtc/modules/video_render/video_render.h
index 84c9536..a193a18 100644
--- a/webrtc/modules/video_render/video_render.h
+++ b/webrtc/modules/video_render/video_render.h
@@ -53,7 +53,7 @@
     static void DestroyVideoRender(VideoRender* module);
 
     int64_t TimeUntilNextProcess() override = 0;
-    void Process() override = 0;
+    int32_t Process() override = 0;
 
     /**************************************************************************
      *
diff --git a/webrtc/modules/video_render/video_render_impl.cc b/webrtc/modules/video_render/video_render_impl.cc
index 2f145a7..d2a074b 100644
--- a/webrtc/modules/video_render/video_render_impl.cc
+++ b/webrtc/modules/video_render/video_render_impl.cc
@@ -119,7 +119,11 @@
     // Not used
     return 50;
 }
-void ModuleVideoRenderImpl::Process() {}
+int32_t ModuleVideoRenderImpl::Process()
+{
+    // Not used
+    return 0;
+}
 
 void*
 ModuleVideoRenderImpl::Window()
diff --git a/webrtc/modules/video_render/video_render_impl.h b/webrtc/modules/video_render/video_render_impl.h
index 12244a6..ce93cea 100644
--- a/webrtc/modules/video_render/video_render_impl.h
+++ b/webrtc/modules/video_render/video_render_impl.h
@@ -35,7 +35,7 @@
     virtual ~ModuleVideoRenderImpl();
 
     virtual int64_t TimeUntilNextProcess();
-    virtual void Process();
+    virtual int32_t Process();
 
     /*
      *   Returns the render window
diff --git a/webrtc/modules/video_render/video_render_internal_impl.cc b/webrtc/modules/video_render/video_render_internal_impl.cc
index a9ae0b0..1fed26e 100644
--- a/webrtc/modules/video_render/video_render_internal_impl.cc
+++ b/webrtc/modules/video_render/video_render_internal_impl.cc
@@ -299,7 +299,11 @@
     // Not used
     return 50;
 }
-void ModuleVideoRenderImpl::Process() {}
+int32_t ModuleVideoRenderImpl::Process()
+{
+    // Not used
+    return 0;
+}
 
 void*
 ModuleVideoRenderImpl::Window()
diff --git a/webrtc/video/call_stats.cc b/webrtc/video/call_stats.cc
index 8874c2b..1ee4625 100644
--- a/webrtc/video/call_stats.cc
+++ b/webrtc/video/call_stats.cc
@@ -109,11 +109,11 @@
   return last_process_time_ + kUpdateIntervalMs - clock_->TimeInMilliseconds();
 }
 
-void CallStats::Process() {
+int32_t CallStats::Process() {
   rtc::CritScope cs(&crit_);
   int64_t now = clock_->TimeInMilliseconds();
   if (now < last_process_time_ + kUpdateIntervalMs)
-    return;
+    return 0;
 
   last_process_time_ = now;
 
@@ -132,6 +132,7 @@
     sum_avg_rtt_ms_ += avg_rtt_ms_;
     ++num_avg_rtt_;
   }
+  return 0;
 }
 
 int64_t CallStats::avg_rtt_ms() const {
diff --git a/webrtc/video/call_stats.h b/webrtc/video/call_stats.h
index bb3670c..385f6ff 100644
--- a/webrtc/video/call_stats.h
+++ b/webrtc/video/call_stats.h
@@ -34,7 +34,7 @@
 
   // Implements Module, to use the process thread.
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
   // Returns a RtcpRttStats to register at a statistics provider. The object
   // has the same lifetime as the CallStats instance.
diff --git a/webrtc/video/overuse_frame_detector.cc b/webrtc/video/overuse_frame_detector.cc
index 18c6b9e..9f12137 100644
--- a/webrtc/video/overuse_frame_detector.cc
+++ b/webrtc/video/overuse_frame_detector.cc
@@ -297,14 +297,14 @@
   }
 }
 
-void OveruseFrameDetector::Process() {
+int32_t OveruseFrameDetector::Process() {
   RTC_DCHECK(processing_thread_.CalledOnValidThread());
 
   int64_t now = clock_->TimeInMilliseconds();
 
   // Used to protect against Process() being called too often.
   if (now < next_process_time_ms_)
-    return;
+    return 0;
 
   next_process_time_ms_ = now + kProcessIntervalMs;
 
@@ -313,7 +313,7 @@
     rtc::CritScope cs(&crit_);
     ++num_process_times_;
     if (num_process_times_ <= options_.min_process_count || !metrics_)
-      return;
+      return 0;
 
     current_metrics = *metrics_;
   }
@@ -358,6 +358,8 @@
                   << " encode usage " << current_metrics.encode_usage_percent
                   << " overuse detections " << num_overuse_detections_
                   << " rampup delay " << rampup_delay;
+
+  return 0;
 }
 
 bool OveruseFrameDetector::IsOverusing(const CpuOveruseMetrics& metrics) {
diff --git a/webrtc/video/overuse_frame_detector.h b/webrtc/video/overuse_frame_detector.h
index 43c9e28..80c9b55 100644
--- a/webrtc/video/overuse_frame_detector.h
+++ b/webrtc/video/overuse_frame_detector.h
@@ -90,7 +90,7 @@
 
   // Implements Module.
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
  private:
   class SendProcessingUsage;
diff --git a/webrtc/video/vie_sync_module.cc b/webrtc/video/vie_sync_module.cc
index f8376e5..dc924fb 100644
--- a/webrtc/video/vie_sync_module.cc
+++ b/webrtc/video/vie_sync_module.cc
@@ -88,14 +88,14 @@
   return kSyncIntervalMs - (TickTime::Now() - last_sync_time_).Milliseconds();
 }
 
-void ViESyncModule::Process() {
+int32_t ViESyncModule::Process() {
   rtc::CritScope lock(&data_cs_);
   last_sync_time_ = TickTime::Now();
 
   const int current_video_delay_ms = vcm_->Delay();
 
   if (voe_channel_id_ == -1) {
-    return;
+    return 0;
   }
   assert(video_rtp_rtcp_ && voe_sync_interface_);
   assert(sync_.get());
@@ -105,7 +105,7 @@
   if (voe_sync_interface_->GetDelayEstimate(voe_channel_id_,
                                             &audio_jitter_buffer_delay_ms,
                                             &playout_buffer_delay_ms) != 0) {
-    return;
+    return 0;
   }
   const int current_audio_delay_ms = audio_jitter_buffer_delay_ms +
       playout_buffer_delay_ms;
@@ -114,26 +114,26 @@
   RtpReceiver* voice_receiver = NULL;
   if (0 != voe_sync_interface_->GetRtpRtcp(voe_channel_id_, &voice_rtp_rtcp,
                                            &voice_receiver)) {
-    return;
+    return 0;
   }
   assert(voice_rtp_rtcp);
   assert(voice_receiver);
 
   if (UpdateMeasurements(&video_measurement_, *video_rtp_rtcp_,
                          *video_receiver_) != 0) {
-    return;
+    return 0;
   }
 
   if (UpdateMeasurements(&audio_measurement_, *voice_rtp_rtcp,
                          *voice_receiver) != 0) {
-    return;
+    return 0;
   }
 
   int relative_delay_ms;
   // Calculate how much later or earlier the audio stream is compared to video.
   if (!sync_->ComputeRelativeDelay(audio_measurement_, video_measurement_,
                                    &relative_delay_ms)) {
-    return;
+    return 0;
   }
 
   TRACE_COUNTER1("webrtc", "SyncCurrentVideoDelay", current_video_delay_ms);
@@ -147,7 +147,7 @@
                             current_audio_delay_ms,
                             &target_audio_delay_ms,
                             &target_video_delay_ms)) {
-    return;
+    return 0;
   }
 
   if (voe_sync_interface_->SetMinimumPlayoutDelay(
@@ -155,6 +155,7 @@
     LOG(LS_ERROR) << "Error setting voice delay.";
   }
   vcm_->SetMinimumPlayoutDelay(target_video_delay_ms);
+  return 0;
 }
 
 }  // namespace webrtc
diff --git a/webrtc/video/vie_sync_module.h b/webrtc/video/vie_sync_module.h
index 5724ce7..779eb00 100644
--- a/webrtc/video/vie_sync_module.h
+++ b/webrtc/video/vie_sync_module.h
@@ -40,7 +40,7 @@
 
   // Implements Module.
   int64_t TimeUntilNextProcess() override;
-  void Process() override;
+  int32_t Process() override;
 
  private:
   rtc::CriticalSection data_cs_;
diff --git a/webrtc/voice_engine/monitor_module.cc b/webrtc/voice_engine/monitor_module.cc
index fb3c2b4..2d8f4d4 100644
--- a/webrtc/voice_engine/monitor_module.cc
+++ b/webrtc/voice_engine/monitor_module.cc
@@ -57,7 +57,7 @@
     return kAverageProcessUpdateTimeMs - (now - _lastProcessTime);
 }
 
-void
+int32_t
 MonitorModule::Process()
 {
     _lastProcessTime = TickTime::MillisecondTimestamp();
@@ -66,6 +66,7 @@
     {
         _observerPtr->OnPeriodicProcess();
     }
+    return 0;
 }
 
 }  // namespace voe
diff --git a/webrtc/voice_engine/monitor_module.h b/webrtc/voice_engine/monitor_module.h
index f026f72..5539915 100644
--- a/webrtc/voice_engine/monitor_module.h
+++ b/webrtc/voice_engine/monitor_module.h
@@ -42,7 +42,7 @@
 public:	// module
  int64_t TimeUntilNextProcess() override;
 
- void Process() override;
+ int32_t Process() override;
 
 private:
     rtc::CriticalSection _callbackCritSect;
diff --git a/webrtc/voice_engine/output_mixer.cc b/webrtc/voice_engine/output_mixer.cc
index 1c9525a..aa50e0b 100644
--- a/webrtc/voice_engine/output_mixer.cc
+++ b/webrtc/voice_engine/output_mixer.cc
@@ -224,8 +224,7 @@
 int32_t
 OutputMixer::MixActiveChannels()
 {
-    _mixerModule.Process();
-    return 0;
+    return _mixerModule.Process();
 }
 
 int