@@ -56,12 +56,15 @@ public class BacktraceDatabaseContext implements DatabaseContext {
5656
5757 /**
5858 * @deprecated This constructor will be removed in future versions.
59- * The {@code context} parameter is no longer used.
60- * Please use the constructor without the {@code context} parameter.
59+ * The {@code context} parameter is no longer used.
60+ * Please use the constructor without the {@code context} parameter.
6161 *
62- * <p>Use {@link #BacktraceDatabaseContext(BacktraceDatabaseSettings)} instead.</p>
62+ * <p>
63+ * Use {@link #BacktraceDatabaseContext(BacktraceDatabaseSettings)}
64+ * instead.
65+ * </p>
6366 *
64- * @param context The unused Android context parameter.
67+ * @param context The unused Android context parameter.
6568 * @param settings The database settings.
6669 */
6770 @ Deprecated
@@ -145,7 +148,8 @@ public BacktraceDatabaseRecord add(BacktraceDatabaseRecord backtraceDatabaseReco
145148 }
146149
147150 /**
148- * Get first existing database record. Method returns record based on order in database
151+ * Get first existing database record. Method returns record based on order in
152+ * database
149153 *
150154 * @return first Backtrace database record
151155 */
@@ -156,15 +160,15 @@ public BacktraceDatabaseRecord first() {
156160 }
157161
158162 /**
159- * Get last existing database record. Method returns record based on order in database
163+ * Get last existing database record. Method returns record based on order in
164+ * database
160165 *
161166 * @return last Backtrace database record
162167 */
163168 public BacktraceDatabaseRecord last () {
164169 return this .retryOrder == RetryOrder .Queue ? getLastRecord () : getFirstRecord ();
165170 }
166171
167-
168172 /**
169173 * Get all database records
170174 *
@@ -187,7 +191,6 @@ public long getDatabaseSize() {
187191 return this .totalSize .get ();
188192 }
189193
190-
191194 /**
192195 * Delete existing record from database
193196 *
@@ -241,7 +244,7 @@ public boolean contains(BacktraceDatabaseRecord record) {
241244 Queue <BacktraceDatabaseRecord > records = entry .getValue ();
242245
243246 for (BacktraceDatabaseRecord databaseRecord : records ) {
244- if (databaseRecord != null && databaseRecord .id == record .id ) {
247+ if (databaseRecord != null && databaseRecord .id . equals ( record .id ) ) {
245248 return true ;
246249 }
247250 }
@@ -288,7 +291,7 @@ public void clear() {
288291 }
289292 }
290293
291- /**
294+ /**
292295 * Delete the oldest file
293296 *
294297 * @return is deletion was successful
@@ -308,26 +311,44 @@ public boolean removeOldestRecord() {
308311 * Increment each batch
309312 */
310313 private void incrementBatches () {
314+ // Move batches forward: batch i -> batch i+1
315+ // Iterate in reverse to avoid overwriting data before moving it
311316 for (int i = this ._retryNumber - 2 ; i >= 0 ; i --) {
312317 Queue <BacktraceDatabaseRecord > currentBatch = this .batchRetry .get (i );
313- batchRetry .put (i , new ConcurrentLinkedQueue <>());
314- batchRetry .put (i + 1 , currentBatch );
318+
319+ // Ensure we have a valid queue (shouldn't be null, but handle it safely)
320+ if (currentBatch == null ) {
321+ currentBatch = new ConcurrentLinkedQueue <>();
322+ }
323+
324+ // Store reference to the batch we're moving
325+ Queue <BacktraceDatabaseRecord > batchToMove = currentBatch ;
326+
327+ // Clear batch at position i and replace with new empty queue
328+ this .batchRetry .put (i , new ConcurrentLinkedQueue <>());
329+
330+ // Move the batch to the next position (overwriting whatever was there)
331+ this .batchRetry .put (i + 1 , batchToMove );
315332 }
316333 }
317334
318335 /**
319336 * Remove last batch
320337 */
321338 private void removeMaxRetries () {
322- Queue <BacktraceDatabaseRecord > currentBatch = this .batchRetry .get (_retryNumber - 1 );
339+ Queue <BacktraceDatabaseRecord > currentBatch = this .batchRetry .put (_retryNumber - 1 , new ConcurrentLinkedQueue <>());
340+
341+ if (currentBatch == null ) {
342+ this .batchRetry .put (_retryNumber - 1 , new ConcurrentLinkedQueue <>());
343+ return ;
344+ }
323345
324346 for (BacktraceDatabaseRecord record : currentBatch ) {
325- if (!record .valid ()) {
326- continue ;
347+ if (record .valid ()) {
348+ record .delete ();
349+ this .totalRecords .decrementAndGet ();
350+ totalSize .addAndGet (-record .getSize ());
327351 }
328- record .delete ();
329- this .totalRecords .decrementAndGet ();
330- totalSize .addAndGet (-record .getSize ());
331352 }
332353 }
333354
0 commit comments