summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@android.com>2011-03-15 11:22:43 -0700
committerAndroid Code Review <code-review@android.com>2011-03-15 11:22:43 -0700
commit56c4c442c0309aa91958dee6b6ed2d65db7ba17d (patch)
tree1f5115356bef5d79c162bafe4eb3623eb586d4ce /telephony
parentb98c8fca954718cb61d6513e623a78f1b0bd0edb (diff)
parent17eb45fff83387d4132b1ed94e927896ddb1ef5a (diff)
downloadframeworks_base-56c4c442c0309aa91958dee6b6ed2d65db7ba17d.zip
frameworks_base-56c4c442c0309aa91958dee6b6ed2d65db7ba17d.tar.gz
frameworks_base-56c4c442c0309aa91958dee6b6ed2d65db7ba17d.tar.bz2
Merge "Lazy initialization must be synchronized to avoid parallel instances cretation."
Diffstat (limited to 'telephony')
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CatService.java40
1 files changed, 22 insertions, 18 deletions
diff --git a/telephony/java/com/android/internal/telephony/cat/CatService.java b/telephony/java/com/android/internal/telephony/cat/CatService.java
index 1e23e34..36059ad 100644
--- a/telephony/java/com/android/internal/telephony/cat/CatService.java
+++ b/telephony/java/com/android/internal/telephony/cat/CatService.java
@@ -118,6 +118,8 @@ public class CatService extends Handler implements AppInterface {
private static IccRecords mIccRecords;
// Service members.
+ // Protects singleton instance lazy initialization.
+ private static final Object sInstanceLock = new Object();
private static CatService sInstance;
private CommandsInterface mCmdIf;
private Context mContext;
@@ -515,26 +517,28 @@ public class CatService extends Handler implements AppInterface {
*/
public static CatService getInstance(CommandsInterface ci, IccRecords ir,
Context context, IccFileHandler fh, IccCard ic) {
- if (sInstance == null) {
- if (ci == null || ir == null || context == null || fh == null
- || ic == null) {
- return null;
+ synchronized (sInstanceLock) {
+ if (sInstance == null) {
+ if (ci == null || ir == null || context == null || fh == null
+ || ic == null) {
+ return null;
+ }
+ HandlerThread thread = new HandlerThread("Cat Telephony service");
+ thread.start();
+ sInstance = new CatService(ci, ir, context, fh, ic);
+ CatLog.d(sInstance, "NEW sInstance");
+ } else if ((ir != null) && (mIccRecords != ir)) {
+ CatLog.d(sInstance, "Reinitialize the Service with SIMRecords");
+ mIccRecords = ir;
+
+ // re-Register for SIM ready event.
+ mIccRecords.registerForRecordsLoaded(sInstance, MSG_ID_ICC_RECORDS_LOADED, null);
+ CatLog.d(sInstance, "sr changed reinitialize and return current sInstance");
+ } else {
+ CatLog.d(sInstance, "Return current sInstance");
}
- HandlerThread thread = new HandlerThread("Cat Telephony service");
- thread.start();
- sInstance = new CatService(ci, ir, context, fh, ic);
- CatLog.d(sInstance, "NEW sInstance");
- } else if ((ir != null) && (mIccRecords != ir)) {
- CatLog.d(sInstance, "Reinitialize the Service with SIMRecords");
- mIccRecords = ir;
-
- // re-Register for SIM ready event.
- mIccRecords.registerForRecordsLoaded(sInstance, MSG_ID_ICC_RECORDS_LOADED, null);
- CatLog.d(sInstance, "sr changed reinitialize and return current sInstance");
- } else {
- CatLog.d(sInstance, "Return current sInstance");
+ return sInstance;
}
- return sInstance;
}
/**