From 03e95d2dd37ac86fb7d4068e369412df6c9ac16a Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 15 Apr 2020 01:55:31 -0600 Subject: ObservableTunnel: account for race in renulling stats The stats might become null between these two checks, when a tunnel flips off, resulting in a null pointer dereference: at com.wireguard.android.model.ObservableTunnel.getStatisticsAsync (ObservableTunnel.java:103) at com.wireguard.android.fragment.TunnelDetailFragment.updateStats (TunnelDetailFragment.java:108) at com.wireguard.android.fragment.TunnelDetailFragment.access$updateStats (TunnelDetailFragment.java:27) at com.wireguard.android.fragment.TunnelDetailFragment$onResume$1.run (TunnelDetailFragment.java:74) at java.util.TimerThread.mainLoop (TimerThread.java:562) at java.util.TimerThread.run (TimerThread.java:512) Signed-off-by: Jason A. Donenfeld --- ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt') diff --git a/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt b/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt index e7134c51..f8691cbb 100644 --- a/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt +++ b/ui/src/main/java/com/wireguard/android/model/ObservableTunnel.kt @@ -93,14 +93,14 @@ class ObservableTunnel internal constructor( @get:Bindable var statistics: Statistics? = null get() { - if (field == null || field!!.isStale) + if (field == null || field?.isStale != false) manager.getTunnelStatistics(this).whenComplete(ExceptionLoggers.E) return field } private set val statisticsAsync: CompletionStage - get() = if (statistics == null || statistics!!.isStale) + get() = if (statistics == null || statistics?.isStale != false) manager.getTunnelStatistics(this) else CompletableFuture.completedFuture(statistics) -- cgit v1.2.3-59-g8ed1b