realm / realm-java

Realm is a mobile database: a replacement for SQLite & ORMs
http://realm.io
Apache License 2.0
11.45k stars 1.75k forks source link

RealmResults iterator throw ArrayIndexOutOfBoundsException in concurrent case #7892

Open sherardxu opened 1 month ago

sherardxu commented 1 month ago

How frequently does the bug occur?

Sometimes

Description

I'm using toFlow to cache in ViewModel and when I read the cache in multiple scenes, sometimes an exception is thrown.

Stacktrace & log output

java.lang.ArrayIndexOutOfBoundsException: length=10; index=10
    at java.util.ArrayList.add(ArrayList.java:468)
    at io.realm.internal.OsSharedRealm.addIterator(OsSharedRealm.java:515)
    at io.realm.internal.OsResults$Iterator.<init>(OsResults.java:68)
    at io.realm.OrderedRealmCollectionImpl$RealmCollectionIterator.<init>(OrderedRealmCollectionImpl.java:531)
    at io.realm.OrderedRealmCollectionImpl.iterator(OrderedRealmCollectionImpl.java:221)
    at io.realm.RealmResults.iterator(RealmResults.java:71)

Can you reproduce the bug?

Sometimes

Reproduction Steps

No response

Version

10.18.0

What Atlas App Services are you using?

Local Database only

Are you using encryption?

Yes

Platform OS and version(s)

Android

Build environment

Android Studio version: 2023.3.1 Patch 1 Android Build Tools version: 34.0.0 Gradle version: 8.6

sync-by-unito[bot] commented 1 month ago

➤ PM Bot commented:

Jira ticket: RJAVA-1263

caeduk commented 1 week ago

Happens quite a lot on my project as well. Encryption: OFF

caeduk commented 1 week ago

this should probably be a synchronised list?

final List<WeakReference<OsResults.Iterator>> iterators = new ArrayList<>();