summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2020-11-11 22:04:54 +0100
committerGitHub <noreply@github.com>2020-11-11 22:04:54 +0100
commit0e84f5d90cd59756c2d38c49182a7801798f84e4 (patch)
treedc6154a7052668b4f4f8f342e3d19e36d8ee4a0c
parenteea503e3e09742c69f65d873382f8a159e34bb0a (diff)
parent8f25f5830a4620218996dcabb73a4ca923b1750a (diff)
downloadAntennaPod-0e84f5d90cd59756c2d38c49182a7801798f84e4.zip
Merge pull request #4666 from ByteHamster/db-corruption
Use lazy singleton instead of Bill Pugh singleton
-rw-r--r--core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java40
1 files changed, 19 insertions, 21 deletions
diff --git a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
index 935b06cd6..ad7f40700 100644
--- a/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
+++ b/core/src/main/java/de/danoeh/antennapod/core/storage/PodDBAdapter.java
@@ -316,46 +316,44 @@ public class PodDBAdapter {
+ JOIN_FEED_ITEM_AND_MEDIA;
private static Context context;
+ private static PodDBAdapter instance;
- private static volatile SQLiteDatabase db;
+ private final SQLiteDatabase db;
+ private final PodDBHelper dbHelper;
public static void init(Context context) {
PodDBAdapter.context = context.getApplicationContext();
}
- // Bill Pugh Singleton Implementation
- private static class SingletonHolder {
- private static final PodDBHelper dbHelper = new PodDBHelper(PodDBAdapter.context, DATABASE_NAME, null);
- private static final PodDBAdapter dbAdapter = new PodDBAdapter();
- }
-
public static PodDBAdapter getInstance() {
- return SingletonHolder.dbAdapter;
+ if (instance == null) {
+ instance = new PodDBAdapter();
+ }
+ return instance;
}
private PodDBAdapter() {
+ dbHelper = new PodDBHelper(PodDBAdapter.context, DATABASE_NAME, null);
+ db = openDb();
}
- public synchronized PodDBAdapter open() {
- if (db == null || !db.isOpen() || db.isReadOnly()) {
- db = openDb();
- }
- return this;
- }
-
- @SuppressLint("NewApi")
private SQLiteDatabase openDb() {
SQLiteDatabase newDb;
try {
- newDb = SingletonHolder.dbHelper.getWritableDatabase();
+ newDb = dbHelper.getWritableDatabase();
newDb.disableWriteAheadLogging();
} catch (SQLException ex) {
Log.e(TAG, Log.getStackTraceString(ex));
- newDb = SingletonHolder.dbHelper.getReadableDatabase();
+ newDb = dbHelper.getReadableDatabase();
}
return newDb;
}
+ public synchronized PodDBAdapter open() {
+ // do nothing
+ return this;
+ }
+
public synchronized void close() {
// do nothing
}
@@ -371,8 +369,8 @@ public class PodDBAdapter {
* <a href="https://github.com/robolectric/robolectric/issues/1890">robolectric/robolectric#1890</a>.</p>
*/
public static void tearDownTests() {
- db = null;
- SingletonHolder.dbHelper.close();
+ getInstance().dbHelper.close();
+ instance = null;
}
public static boolean deleteDatabase() {
@@ -380,7 +378,7 @@ public class PodDBAdapter {
adapter.open();
try {
for (String tableName : ALL_TABLES) {
- db.delete(tableName, "1", null);
+ adapter.db.delete(tableName, "1", null);
}
return true;
} finally {