Skip to content

Commit 28989c4

Browse files
Merge pull request #106 from backtrace-labs/bugfix/delete-record-db-context
Fix delete same record multiple times
2 parents 5c3ab5c + 25a1b05 commit 28989c4

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Backtrace Android Release Notes
22

3+
## Version 3.7.9
4+
5+
- Fixed problem when thread is trying to delete already deleted record from db context
6+
37
## Version 3.7.8
48

59
- Fixed missing breadcrumbs intent filter in SDK 33+.

backtrace-library/src/androidTest/java/backtraceio/library/database/BacktraceDatabaseContextTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,21 @@ public void deleteFromDatabaseContext() {
199199
assertTrue(databaseContext.contains(records.get(2)));
200200
}
201201

202+
@Test
203+
public void deleteSameRecordFromDatabaseContext() {
204+
// GIVEN
205+
List<BacktraceDatabaseRecord> records = fillDatabase();
206+
207+
// WHEN
208+
databaseContext.delete(records.get(0));
209+
databaseContext.delete(records.get(0));
210+
211+
// THEN
212+
assertEquals(2, databaseContext.count());
213+
assertTrue(databaseContext.contains(records.get(1)));
214+
assertTrue(databaseContext.contains(records.get(2)));
215+
}
216+
202217
@Test
203218
public void tryDeleteNotExistingRecordFromDatabaseContext() {
204219
// GIVEN

backtrace-library/src/main/java/backtraceio/library/services/BacktraceDatabaseContext.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,13 @@ private BacktraceDatabaseContext(Context context, String path, int retryNumber,
7575
this._path = path;//this.getAbsolutePath(path);
7676
this._retryNumber = retryNumber;
7777
this.retryOrder = retryOrder;
78-
SetupBatch();
78+
setupBatch();
7979
}
8080

8181
/**
8282
* Setup cache
8383
*/
84-
private void SetupBatch() {
84+
private void setupBatch() {
8585
if (this._retryNumber == 0) {
8686
throw new IllegalArgumentException("Retry number must be greater than 0!");
8787
}
@@ -175,15 +175,23 @@ public boolean delete(BacktraceDatabaseRecord record) {
175175
}
176176

177177
for (int key : batchRetry.keySet()) {
178-
for (BacktraceDatabaseRecord databaseRecord : batchRetry.get(key)) {
178+
List<BacktraceDatabaseRecord> records = batchRetry.get(key);
179+
180+
for (BacktraceDatabaseRecord databaseRecord : records) {
179181
if (databaseRecord == null || record.id != databaseRecord.id) {
180182
continue;
181183
}
182184

183185
databaseRecord.delete();
184-
batchRetry.get(key).remove(databaseRecord);
185-
this.totalRecords--;
186-
this.totalSize -= databaseRecord.getSize();
186+
try {
187+
records.remove(databaseRecord);
188+
this.totalRecords--;
189+
this.totalSize -= databaseRecord.getSize();
190+
}
191+
catch (Exception e) {
192+
BacktraceLogger.d(LOG_TAG, "Exception on removing record from db context: " + e.getMessage());
193+
}
194+
187195
return true;
188196
}
189197
}

0 commit comments

Comments
 (0)