From fb39c8abe153adaccf35787d61ce452e9875c717 Mon Sep 17 00:00:00 2001 From: AlexanderYukhanov Date: Thu, 12 Jan 2023 16:12:09 -0800 Subject: [PATCH] Fix singleton implementation #234 Double checked locking requires the second check. --- .../roomwordssample/WordRoomDatabase.kt | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/example/android/roomwordssample/WordRoomDatabase.kt b/app/src/main/java/com/example/android/roomwordssample/WordRoomDatabase.kt index c7fe950..8c71603 100755 --- a/app/src/main/java/com/example/android/roomwordssample/WordRoomDatabase.kt +++ b/app/src/main/java/com/example/android/roomwordssample/WordRoomDatabase.kt @@ -45,19 +45,24 @@ abstract class WordRoomDatabase : RoomDatabase() { // if the INSTANCE is not null, then return it, // if it is, then create the database return INSTANCE ?: synchronized(this) { - val instance = Room.databaseBuilder( - context.applicationContext, - WordRoomDatabase::class.java, - "word_database" - ) + INSTANCE ?: + run { // Wipes and rebuilds instead of migrating if no Migration object. // Migration is not part of this codelab. - .fallbackToDestructiveMigration() - .addCallback(WordDatabaseCallback(scope)) - .build() - INSTANCE = instance - // return instance - instance + val instance = Room.databaseBuilder( + context.applicationContext, + WordRoomDatabase::class.java, + "word_database" + ) + // Wipes and rebuilds instead of migrating if no Migration object. + // Migration is not part of this codelab. + .fallbackToDestructiveMigration() + .addCallback(WordDatabaseCallback(scope)) + .build() + INSTANCE = instance + // return instance + instance + } } }