Skip to content

Issue when detaching listeners on android #76

@shnupta

Description

@shnupta

When a user logs out of my app I detach various listeners from different paths.
Sometimes it logs them out fine however around 1 in 5 times the app will crash after the user has been logged out. Here is the output from the console:

06-20 20:41:37.203 29260 29734 W SyncTree: Listen at /users/liApgOzu1pg6jHSUp29xQiqo8T83/riders failed: DatabaseError: Permission denied
06-20 20:41:37.219 29260 29734 W SyncTree: Listen at /events failed: DatabaseError: Permission denied
06-20 20:41:37.221 29260 29260 D QuickLaps: Uno.Exception: This promise is already resolved or rejected
06-20 20:41:37.221 29260 29260 D QuickLaps:    at Uno.Threading.Future`1.InternalReject(Uno.Exception)
06-20 20:41:37.221 29260 29260 D QuickLaps:    at Uno.Threading.Promise`1.Reject(Uno.Exception)
06-20 20:41:37.221 29260 29260 D QuickLaps:    at Firebase.Database.Read.Reject(string)
06-20 20:41:37.221 29260 29260 D AndroidRuntime: Shutting down VM
06-20 20:41:37.223 29260 29260 E AndroidRuntime: FATAL EXCEPTION: main
06-20 20:41:37.223 29260 29260 E AndroidRuntime: Process: io.github.shnupta.quick_laps, PID: 29260
06-20 20:41:37.223 29260 29260 E AndroidRuntime: java.lang.RuntimeException: Uno.Exception: This promise is already resolved or rejected
06-20 20:41:37.223 29260 29260 E AndroidRuntime:    at Uno.Threading.Future`1.InternalReject(Uno.Exception)
06-20 20:41:37.223 29260 29260 E AndroidRuntime:    at Uno.Threading.Promise`1.Reject(Uno.Exception)
06-20 20:41:37.223 29260 29260 E AndroidRuntime:    at Firebase.Database.Read.Reject(string)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.Bindings.ExternedBlockHost.callUno_Firebase_Database_Read_Reject1454(Native Method)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.foreign.Firebase.Database.Read$1.onCancelled(Read.java:59)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.google.firebase.database.Query$1.onCancelled(Unknown Source:2)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.google.android.gms.internal.zzaih.zza(Unknown Source:2)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.google.android.gms.internal.zzajf.zzctc(Unknown Source:4)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.google.android.gms.internal.zzajk$1.run(Unknown Source:62)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:790)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:164)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:6753)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:482)
06-20 20:41:37.223 29260 29260 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
06-20 20:41:37.226   592   592 E SELinux : avc:  denied  { find } for service=opdiagnose pid=29260 uid=10263 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:opdiagnose_service:s0 tclass=service_manager permissive=0
06-20 20:41:37.226   592   592 E SELinux : avc:  denied  { find } for service=opdiagnose pid=29260 uid=10263 scontext=u:r:untrusted_app_25:s0:c512,c768 tcontext=u:object_r:opdiagnose_service:s0 tclass=service_manager permissive=0
06-20 20:41:37.227 29260 29260 W OPDiagnose: getService:OPDiagnoseService NULL
06-20 20:41:37.233 29260 31073 D OSTracker: OS Event: crash
06-20 20:41:37.347 29260 31073 D AbstractTracker: Event success
06-20 20:41:37.367 29260 29734 W SyncTree: Listen at /users/riders failed: DatabaseError: Permission denied
06-20 20:41:37.381 29260 29734 W SyncTree: Listen at /events failed: DatabaseError: Permission denied

Looking at the source, I'm confused as to why the Android method for DetachListeners is empty? If this is supposed to be then is there a way to check whether the current promise has already been resolved before calling a read?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions