| Index: android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java
|
| diff --git a/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java b/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java
|
| index e47cd268f52bc70c5c023fe977276f05c720cb52..31d2fa184b82db655af96e1ad8ee62f4d36b3cf8 100644
|
| --- a/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java
|
| +++ b/android_webview/java/src/org/chromium/android_webview/crash/MinidumpUploaderImpl.java
|
| @@ -161,6 +161,10 @@ public class MinidumpUploaderImpl implements MinidumpUploader {
|
| int uploadResult = uploadCallable.call();
|
|
|
| // Job was canceled -> early out: any clean-up will be performed in cancelUploads().
|
| + // Note that we check whether we are canceled AFTER trying to upload a minidump -
|
| + // this is to allow the uploading of at least one minidump per job (to deal with
|
| + // cases where we reschedule jobs over and over again and would never upload any
|
| + // minidumps because old jobs are canceled when scheduling new jobs).
|
| if (getCancelUpload()) return;
|
|
|
| if (uploadResult == MinidumpUploadCallable.UPLOAD_FAILURE) {
|
| @@ -202,14 +206,27 @@ public class MinidumpUploaderImpl implements MinidumpUploader {
|
| ThreadUtils.assertOnUiThread();
|
|
|
| mPermittedByUser = enabled;
|
| - // Our job might have been cancelled by now - make sure we honour this.
|
| - if (!getCancelUpload()) {
|
| - mWorkerThread.start();
|
| - }
|
| + // Note that our job might have been cancelled by this time - however, we do start
|
| + // our worker thread anyway to try to make some progress towards uploading
|
| + // minidumps.
|
| + // This is to ensure that in the case where an app is crashing over and over again
|
| + // - and we are rescheduling jobs over and over again - we are still uploading at
|
| + // least one minidump per job, as long as that job starts before it is canceled by
|
| + // the next job.
|
| + // For cases where the job is cancelled because the network connection is lost, or
|
| + // because we switch over to a metered connection, we won't try to upload any
|
| + // minidumps anyway since we check the network connection just before the upload of
|
| + // each minidump.
|
| + mWorkerThread.start();
|
| }
|
| });
|
| }
|
|
|
| + @VisibleForTesting
|
| + public void joinWorkerThreadForTesting() throws InterruptedException {
|
| + mWorkerThread.join();
|
| + }
|
| +
|
| /**
|
| * @return whether to reschedule the uploads.
|
| */
|
|
|