summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Shrauner <shrauner@google.com>2014-07-30 14:01:57 -0700
committerJay Shrauner <shrauner@google.com>2014-07-30 16:25:41 -0700
commit0ab307238107189b4717127b638e6c7dc9f988f1 (patch)
treeba826422983b739fb75285ffe93b26077a40c8c0
parent9e49d121ea2491aee140a350630ce21ce2c2e89e (diff)
downloadandroid_packages_providers_CalendarProvider-0ab307238107189b4717127b638e6c7dc9f988f1.tar.gz
android_packages_providers_CalendarProvider-0ab307238107189b4717127b638e6c7dc9f988f1.tar.bz2
android_packages_providers_CalendarProvider-0ab307238107189b4717127b638e6c7dc9f988f1.zip
Fix stale db handle crash
Need to reacquire db handle before handling requests. Fix NPEs when timezonetype isn't in the cache. Bug:16559219 Change-Id: Ie037399aec91feb80312adf7c37d8d210b6aa544
-rw-r--r--src/com/android/providers/calendar/CalendarAlarmManager.java4
-rw-r--r--src/com/android/providers/calendar/CalendarInstancesHelper.java8
-rw-r--r--src/com/android/providers/calendar/CalendarProvider2.java18
3 files changed, 17 insertions, 13 deletions
diff --git a/src/com/android/providers/calendar/CalendarAlarmManager.java b/src/com/android/providers/calendar/CalendarAlarmManager.java
index 266237d..08269eb 100644
--- a/src/com/android/providers/calendar/CalendarAlarmManager.java
+++ b/src/com/android/providers/calendar/CalendarAlarmManager.java
@@ -364,8 +364,8 @@ public class CalendarAlarmManager {
String.valueOf(currentMillis) };
String instancesTimezone = cp2.mCalendarCache.readTimezoneInstances();
- boolean isHomeTimezone = cp2.mCalendarCache.readTimezoneType().equals(
- CalendarCache.TIMEZONE_TYPE_HOME);
+ final String timezoneType = cp2.mCalendarCache.readTimezoneType();
+ boolean isHomeTimezone = CalendarCache.TIMEZONE_TYPE_HOME.equals(timezoneType);
// expand this range by a day on either end to account for all day
// events
cp2.acquireInstanceRangeLocked(
diff --git a/src/com/android/providers/calendar/CalendarInstancesHelper.java b/src/com/android/providers/calendar/CalendarInstancesHelper.java
index 356b442..19b1faa 100644
--- a/src/com/android/providers/calendar/CalendarInstancesHelper.java
+++ b/src/com/android/providers/calendar/CalendarInstancesHelper.java
@@ -59,7 +59,6 @@ public class CalendarInstancesHelper {
private static final String TAG = "CalInstances";
private CalendarDatabaseHelper mDbHelper;
- private SQLiteDatabase mDb;
private MetaData mMetaData;
private CalendarCache mCalendarCache;
@@ -130,7 +129,6 @@ public class CalendarInstancesHelper {
public CalendarInstancesHelper(CalendarDatabaseHelper calendarDbHelper, MetaData metaData) {
mDbHelper = calendarDbHelper;
- mDb = mDbHelper.getWritableDatabase();
mMetaData = metaData;
mCalendarCache = new CalendarCache(mDbHelper);
}
@@ -592,7 +590,8 @@ public class CalendarInstancesHelper {
"0", // Calendars.SYNC_EVENTS
"0", // Events.LAST_SYNCED
};
- Cursor c = qb.query(mDb, EXPAND_COLUMNS, null /* selection */, selectionArgs,
+ final SQLiteDatabase db = mDbHelper.getReadableDatabase();
+ Cursor c = qb.query(db, EXPAND_COLUMNS, null /* selection */, selectionArgs,
null /* groupBy */, null /* having */, null /* sortOrder */);
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "Instance expansion: got " + c.getCount() + " entries");
@@ -858,7 +857,8 @@ public class CalendarInstancesHelper {
Log.v(TAG, "Retrieving events to expand: " + qb.toString());
}
- return qb.query(mDb, EXPAND_COLUMNS, null /* selection */, selectionArgs,
+ final SQLiteDatabase db = mDbHelper.getReadableDatabase();
+ return qb.query(db, EXPAND_COLUMNS, null /* selection */, selectionArgs,
null /* groupBy */, null /* having */, null /* sortOrder */);
}
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java
index cf4f16a..9af4c77 100644
--- a/src/com/android/providers/calendar/CalendarProvider2.java
+++ b/src/com/android/providers/calendar/CalendarProvider2.java
@@ -773,8 +773,8 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
}
private boolean isHomeTimezone() {
- String type = mCalendarCache.readTimezoneType();
- return type.equals(CalendarCache.TIMEZONE_TYPE_HOME);
+ final String type = mCalendarCache.readTimezoneType();
+ return CalendarCache.TIMEZONE_TYPE_HOME.equals(type);
}
private void regenerateInstancesTable() {
@@ -1089,6 +1089,7 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
String sort, boolean searchByDay, boolean forceExpansion,
String instancesTimezone, boolean isHomeTimezone) {
+ mDb = mDbHelper.getWritableDatabase();
qb.setTables(INSTANCE_QUERY_TABLES);
qb.setProjectionMap(sInstancesProjectionMap);
if (searchByDay) {
@@ -1256,6 +1257,7 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
long rangeBegin, long rangeEnd, String query, String[] projection,
String selection, String[] selectionArgs, String sort, boolean searchByDay,
String instancesTimezone, boolean isHomeTimezone) {
+ mDb = mDbHelper.getWritableDatabase();
qb.setTables(INSTANCE_SEARCH_QUERY_TABLES);
qb.setProjectionMap(sInstancesProjectionMap);
@@ -1311,6 +1313,7 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
private Cursor handleEventDayQuery(SQLiteQueryBuilder qb, int begin, int end,
String[] projection, String selection, String instancesTimezone,
boolean isHomeTimezone) {
+ mDb = mDbHelper.getWritableDatabase();
qb.setTables(INSTANCE_QUERY_TABLES);
qb.setProjectionMap(sInstancesProjectionMap);
// Convert the first and last Julian day range to a range that uses
@@ -1428,14 +1431,14 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
mMetaData.writeLocked(instancesTimezone, expandBegin, expandEnd);
- String timezoneType = mCalendarCache.readTimezoneType();
+ final String timezoneType = mCalendarCache.readTimezoneType();
// This may cause some double writes but guarantees the time zone in
// the db and the time zone the instances are in is the same, which
// future changes may affect.
mCalendarCache.writeTimezoneInstances(instancesTimezone);
// If we're in auto check if we need to fix the previous tz value
- if (timezoneType.equals(CalendarCache.TIMEZONE_TYPE_AUTO)) {
+ if (CalendarCache.TIMEZONE_TYPE_AUTO.equals(timezoneType)) {
String prevTZ = mCalendarCache.readTimezoneInstancesPrevious();
if (TextUtils.equals(TIMEZONE_GMT, prevTZ)) {
mCalendarCache.writeTimezoneInstancesPrevious(instancesTimezone);
@@ -2113,6 +2116,7 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
final int match = sUriMatcher.match(uri);
verifyTransactionAllowed(TRANSACTION_INSERT, uri, values, callerIsSyncAdapter, match,
null /* selection */, null /* selection args */);
+ mDb = mDbHelper.getWritableDatabase();
long id = 0;
@@ -3062,6 +3066,7 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
final int match = sUriMatcher.match(uri);
verifyTransactionAllowed(TRANSACTION_DELETE, uri, null, callerIsSyncAdapter, match,
selection, selectionArgs);
+ mDb = mDbHelper.getWritableDatabase();
switch (match) {
case SYNCSTATE:
@@ -3926,6 +3931,7 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
final int match = sUriMatcher.match(uri);
verifyTransactionAllowed(TRANSACTION_UPDATE, uri, values, callerIsSyncAdapter, match,
selection, selectionArgs);
+ mDb = mDbHelper.getWritableDatabase();
switch (match) {
case SYNCSTATE:
@@ -4983,9 +4989,7 @@ public class CalendarProvider2 extends SQLiteContentProvider implements OnAccoun
* Makes sure there are no entries for accounts that no longer exist.
*/
private void removeStaleAccounts(Account[] accounts) {
- if (mDb == null) {
- mDb = mDbHelper.getWritableDatabase();
- }
+ mDb = mDbHelper.getWritableDatabase();
if (mDb == null) {
return;
}