Initialize WakeLock in the CTOR
Protect against possible race
Also added a log that will indicate if a second provider is created in the in
same process.
Bug: 11260491
Change-Id: I3048d3c57d1cf6a13b808b85151d20ddb85d95a9
diff --git a/src/com/android/providers/calendar/CalendarAlarmManager.java b/src/com/android/providers/calendar/CalendarAlarmManager.java
index dd4ffb8..596848e 100644
--- a/src/com/android/providers/calendar/CalendarAlarmManager.java
+++ b/src/com/android/providers/calendar/CalendarAlarmManager.java
@@ -119,7 +119,7 @@
/**
* Used to keep the process from getting killed while scheduling alarms
*/
- private WakeLock mScheduleNextAlarmWakeLock;
+ private final WakeLock mScheduleNextAlarmWakeLock;
@VisibleForTesting
protected Context mContext;
@@ -127,6 +127,17 @@
public CalendarAlarmManager(Context context) {
initializeWithContext(context);
+
+ PowerManager powerManager = (PowerManager) mContext.getSystemService(
+ Context.POWER_SERVICE);
+ // Create a wake lock that will be used when we are actually
+ // scheduling the next alarm
+ mScheduleNextAlarmWakeLock = powerManager.newWakeLock(
+ PowerManager.PARTIAL_WAKE_LOCK, SCHEDULE_NEXT_ALARM_WAKE_LOCK);
+ // We want the Wake Lock to be reference counted (so that we dont
+ // need to take care
+ // about its reference counting)
+ mScheduleNextAlarmWakeLock.setReferenceCounted(true);
}
protected void initializeWithContext(Context context) {
@@ -165,18 +176,6 @@
}
PowerManager.WakeLock getScheduleNextAlarmWakeLock() {
- if (mScheduleNextAlarmWakeLock == null) {
- PowerManager powerManager = (PowerManager) mContext.getSystemService(
- Context.POWER_SERVICE);
- // Create a wake lock that will be used when we are actually
- // scheduling the next alarm
- mScheduleNextAlarmWakeLock = powerManager.newWakeLock(
- PowerManager.PARTIAL_WAKE_LOCK, SCHEDULE_NEXT_ALARM_WAKE_LOCK);
- // We want the Wake Lock to be reference counted (so that we dont
- // need to take care
- // about its reference counting)
- mScheduleNextAlarmWakeLock.setReferenceCounted(true);
- }
return mScheduleNextAlarmWakeLock;
}
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java
index 0ac6a6c..cf4f16a 100644
--- a/src/com/android/providers/calendar/CalendarProvider2.java
+++ b/src/com/android/providers/calendar/CalendarProvider2.java
@@ -561,12 +561,12 @@
protected void initCalendarAlarm() {
mCalendarAlarm = getOrCreateCalendarAlarmManager();
- mCalendarAlarm.getScheduleNextAlarmWakeLock();
}
synchronized CalendarAlarmManager getOrCreateCalendarAlarmManager() {
if (mCalendarAlarm == null) {
mCalendarAlarm = new CalendarAlarmManager(mContext);
+ Log.i(TAG, "Created " + mCalendarAlarm + "(" + this + ")");
}
return mCalendarAlarm;
}
diff --git a/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java b/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
index e31f881..e4146dc 100644
--- a/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
+++ b/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
@@ -37,7 +37,6 @@
@Override
protected void initCalendarAlarm() {
mCalendarAlarm = new MockCalendarAlarmManager(getContext());
- mCalendarAlarm.getScheduleNextAlarmWakeLock();
}
@Override