Realm java always crash.
Lemac opened this issue · 3 comments
How frequently does the bug occur?
Sometimes
Description
cannot reproduce manually, but this bug always reproduce.
From the log, I can see the db file is broken.
Stacktrace & log output
java.lang.RuntimeException: Unable to resume activity {com.gspot.video/com.gspot.ui.MainActivity}: java.lang.RuntimeException: flock() failed: Bad file descriptor in /tmp/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 144
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3815)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3847)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1836)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6702)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
Caused by: java.lang.RuntimeException: flock() failed: Bad file descriptor in /tmp/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 144
at io.realm.internal.OsSharedRealm.nativeCommitTransaction(Native Method)
at io.realm.internal.OsSharedRealm.commitTransaction(OsSharedRealm.java:293)
at io.realm.BaseRealm.commitTransaction(BaseRealm.java:460)
at io.realm.Realm.commitTransaction(Realm.java:138)
at com.gspot.db.GSpotRealmDBHelper.getVideoSettings(GSpotRealmDBHelper.java:899)
at com.gspot.ui.HomepageFragment.initStorage(HomepageFragment.java:270)
at com.gspot.ui.HomepageFragment.onResume(HomepageFragment.java:95)
at androidx.fragment.app.Fragment.performResume(Fragment.java:3039)
at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:607)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:306)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:3086)
at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:273)
at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:458)
at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:447)
at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:240)
at android.app.Activity.performResume(Activity.java:7317)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3807)
... 11 more
java.lang.RuntimeException: flock() failed: Bad file descriptor in /tmp/realm-java/realm/realm-library/src/main/cpp/io_realm_internal_OsSharedRealm.cpp line 144
at io.realm.internal.OsSharedRealm.nativeCommitTransaction(Native Method)
at io.realm.internal.OsSharedRealm.commitTransaction(OsSharedRealm.java:293)
at io.realm.BaseRealm.commitTransaction(BaseRealm.java:460)
at io.realm.Realm.commitTransaction(Realm.java:138)
at com.gspot.db.GSpotRealmDBHelper.getVideoSettings(GSpotRealmDBHelper.java:899)
at com.gspot.ui.HomepageFragment.initStorage(HomepageFragment.java:270)
at com.gspot.ui.HomepageFragment.onResume(HomepageFragment.java:95)
at androidx.fragment.app.Fragment.performResume(Fragment.java:3039)
at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:607)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:306)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128)
at androidx.fragment.app.FragmentManager.dispatchResume(FragmentManager.java:3086)
at androidx.fragment.app.FragmentController.dispatchResume(FragmentController.java:273)
at androidx.fragment.app.FragmentActivity.onResumeFragments(FragmentActivity.java:458)
at androidx.fragment.app.FragmentActivity.onPostResume(FragmentActivity.java:447)
at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:240)
at android.app.Activity.performResume(Activity.java:7317)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3807)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3847)
at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1836)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6702)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
Can you reproduce the bug?
Sometimes
Reproduction Steps
cannot reproduce manually, but this bug always reproduce.
From the log, I can see the db file is broken.
Version
10.11.0
What Atlas App Services are you using?
Local Database only
Are you using encryption?
No
Platform OS and version(s)
android 9
Build environment
Android Studio version: Android Studio Electric Eel | 2022.1.1 Patch 2
Android Build Tools version: 3.6.4
Gradle version: 6.1
Thanks for reporting the issue. The issue is generated in the native side of the library, thus we require a native stack trace log, it looks similar to this.
Seems to be rethrown from the JNI wrapper, so there wont be any native stack trace in the logs.
Most likely the file is just deleted when the transaction is about to be committed to storage. @Lemac In which cases do your app delete the realm file? And are you doing it through normal file system operations? In that case you could try using Realm.deleteRealm(...)
to ensure that the various operations are performed mutual exclusively.
This issue has been automatically closed because there has been no response to our request for more information from the original author. With only the information that is currently in the issue, we don't have enough information to take action. Please reach out if you have or find the answers we need so that we can investigate further.