realm / realm-java

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

RealmResults iterator throw ArrayIndexOutOfBoundsException in concurrent case #7892

Open sherardxu opened 6 months ago

sherardxu commented 6 months 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 6 months ago

➤ PM Bot commented:

Jira ticket: RJAVA-1263

caeduk commented 5 months ago

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

caeduk commented 5 months ago

this should probably be a synchronised list?

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