diff options
author | Dmitri Plotnikov <dplotnikov@google.com> | 2010-01-14 17:22:00 -0800 |
---|---|---|
committer | Dmitri Plotnikov <dplotnikov@google.com> | 2010-01-14 17:22:00 -0800 |
commit | f4a3b7e523e36679b68edd2af632e26648758ff2 (patch) | |
tree | 0c9f1b6cffa2739ddc7ba71ecd164c64ea2539ec | |
parent | 1b6c85b96f5cccae94d8bad6ea727accacfb7a0f (diff) | |
download | ContactsProvider-eclair-sholes-release2.tar.gz |
Solving deadlock in ContactProvider2android-2.1_r2.1sandroid-2.1_r2.1p2android-2.1_r2.1pandroid-2.1_r2eclair-sholes-release2eclair-releaseeclair-passion-release
These two threads are deadlocked.
There are two locks involved: database lock (marked with D below and
the object lock on ContactsDatabaseHelper marked with H)
"Binder Thread #2" prio=5 tid=13 MONITOR
| group="main" sCount=1 dsCount=0 s=N obj=0x44bee478 self=0x1205f8
| sysTid=1439 nice=0 sched=0/0 cgrp=default handle=1201736
H at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:~149)
at com.android.providers.contacts.ContactsDatabaseHelper.getMimeTypeId(ContactsDatabaseHelper.java:1512)
at com.android.providers.contacts.ContactsDatabaseHelper.updateAllVisible(ContactsDatabaseHelper.java:1554)
at com.android.providers.contacts.ContactsProvider2.beforeTransactionCommit(ContactsProvider2.java:1989)
at com.android.providers.contacts.SQLiteContentProvider.onCommit(SQLiteContentProvider.java:216)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:494)
D at com.android.providers.contacts.SQLiteContentProvider.insert(SQLiteContentProvider.java:96)
at com.android.providers.contacts.ContactsProvider2.insert(ContactsProvider2.java:1941)
at android.content.ContentProvider$Transport.insert(ContentProvider.java:150)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:140)
at android.os.Binder.execTransact(Binder.java:287)
at dalvik.system.NativeStart.run(Native Method)
"Binder Thread #1" prio=5 tid=11 WAIT
| group="main" sCount=1 dsCount=0 s=N obj=0x44bea248 self=0x125480
| sysTid=1438 nice=0 sched=0/0 cgrp=default handle=1145184
at java.lang.Object.wait(Native Method)
- waiting on <0x5319d0> (a java.lang.VMThread)
at java.lang.Thread.parkFor(Thread.java:1535)
at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)
at sun.misc.Unsafe.park(Unsafe.java:317)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:131)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:790)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:823)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1153)
at java.util.concurrent.locks.ReentrantLock$FairSync.lock(ReentrantLock.java:200)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:261)
D at android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:305)
at android.database.sqlite.SQLiteStatement.simpleQueryForLong(SQLiteStatement.java:116)
H at com.android.providers.contacts.ContactsDatabaseHelper.getCachedId(ContactsDatabaseHelper.java:1478)
at com.android.providers.contacts.ContactsDatabaseHelper.getMimeTypeId(ContactsDatabaseHelper.java:1513)
at com.android.providers.contacts.ContactsProvider2.query(ContactsProvider2.java:3765)
at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:117)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:98)
at android.os.Binder.execTransact(Binder.java:287)
at dalvik.system.NativeStart.run(Native Method)
Removing synchronization from the getCachedId method is benign. Worst case
some value would be read from the database twice - no biggie.
Bug: 2370192
Change-Id: Ia6606d5bf617a8d52daaa1e63f57aeeba6dd0437
-rw-r--r-- | src/com/android/providers/contacts/ContactsDatabaseHelper.java | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/com/android/providers/contacts/ContactsDatabaseHelper.java b/src/com/android/providers/contacts/ContactsDatabaseHelper.java index f248116d..154f62f4 100644 --- a/src/com/android/providers/contacts/ContactsDatabaseHelper.java +++ b/src/com/android/providers/contacts/ContactsDatabaseHelper.java @@ -1464,7 +1464,7 @@ import java.util.HashMap; * @param cache In-memory cache of previous answers. * @return An unique integer mapping for the given value. */ - private synchronized long getCachedId(SQLiteStatement query, SQLiteStatement insert, + private long getCachedId(SQLiteStatement query, SQLiteStatement insert, String value, HashMap<String, Long> cache) { // Try an in-memory cache lookup if (cache.containsKey(value)) { |