OSDN Git Service

Fix NPE in AlarmManager.cancel(...)
authorJoe LaPenna <jlapenna@google.com>
Fri, 1 Apr 2016 20:37:37 +0000 (13:37 -0700)
committerJoe LaPenna <jlapenna@google.com>
Fri, 1 Apr 2016 21:07:35 +0000 (14:07 -0700)
If AlarmManager.cancel is called before any component has had a chance
to register an alarm, sWrappers will not have been set, as it is only
initialized in setImpl.

When cancelling an alarm and sWrappers does not exist, log a warning and
return early.

BUG: 27972657
Change-Id: Ied10719ba1d154f97eecfc32f429fd9ce39bf747

core/java/android/app/AlarmManager.java

index cb2130c..e4fff9d 100644 (file)
@@ -905,10 +905,12 @@ public class AlarmManager {
 
         ListenerWrapper wrapper = null;
         synchronized (AlarmManager.class) {
-            final WeakReference<ListenerWrapper> wrapperRef;
-            wrapperRef = sWrappers.get(listener);
-            if (wrapperRef != null) {
-                wrapper = wrapperRef.get();
+            if (sWrappers != null) {
+                final WeakReference<ListenerWrapper> wrapperRef;
+                wrapperRef = sWrappers.get(listener);
+                if (wrapperRef != null) {
+                    wrapper = wrapperRef.get();
+                }
             }
         }