realm/realm-java

Realm java always crash.

Lemac opened this issue · 3 comments

Lemac commented

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.