diff --git a/app/src/main/java/androidx/lifecycle/ComputableLiveData.java b/app/src/main/java/androidx/lifecycle/ComputableLiveData.java index 16a0d405bc..cc375b15ba 100644 --- a/app/src/main/java/androidx/lifecycle/ComputableLiveData.java +++ b/app/src/main/java/androidx/lifecycle/ComputableLiveData.java @@ -89,17 +89,15 @@ public abstract class ComputableLiveData { @Override public void run() { boolean computed; - boolean once; - long last; do { computed = false; // compute can happen only in 1 thread but no reason to lock others. if (mComputing.compareAndSet(false, true)) { // as long as it is invalid, keep computing. try { - once = true; - last = android.os.SystemClock.elapsedRealtime(); T value = null; + boolean once = true; + long last = android.os.SystemClock.elapsedRealtime(); while (mInvalid.compareAndSet(true, false)) { long now = android.os.SystemClock.elapsedRealtime(); if (value != null && (once || last + 2500 < now)) { diff --git a/patches/livedata.patch b/patches/livedata.patch index 5e47d1c1e4..cdef840936 100644 --- a/patches/livedata.patch +++ b/patches/livedata.patch @@ -1,20 +1,13 @@ ---- /home/marcel/support/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/ComputableLiveData.java 2019-07-27 12:47:44.348985792 +0200 -+++ app/src/main/java/androidx/lifecycle/ComputableLiveData.java 2019-08-14 10:25:21.881453609 +0200 -@@ -89,14 +89,25 @@ public abstract class ComputableLiveData - @Override - public void run() { - boolean computed; -+ boolean once; -+ long last; - do { - computed = false; - // compute can happen only in 1 thread but no reason to lock others. - if (mComputing.compareAndSet(false, true)) { +diff --git a/home/marcel/support/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/ComputableLiveData.java b/app/src/main/java/androidx/lifecycle/ComputableLiveData.java +index 837a35dbf..cc375b15b 100644 +--- a/home/marcel/support/lifecycle/lifecycle-livedata/src/main/java/androidx/lifecycle/ComputableLiveData.java ++++ b/app/src/main/java/androidx/lifecycle/ComputableLiveData.java +@@ -96,7 +96,16 @@ public abstract class ComputableLiveData { // as long as it is invalid, keep computing. try { -+ once = true; -+ last = android.os.SystemClock.elapsedRealtime(); T value = null; ++ boolean once = true; ++ long last = android.os.SystemClock.elapsedRealtime(); while (mInvalid.compareAndSet(true, false)) { + long now = android.os.SystemClock.elapsedRealtime(); + if (value != null && (once || last + 2500 < now)) {