google / ExoPlayer

This project is deprecated and stale. The latest ExoPlayer code is available in https://github.com/androidx/media
https://developer.android.com/media/media3/exoplayer
Apache License 2.0
21.7k stars 6.01k forks source link

NPE in ExtractorSampleSource #888

Closed dnutcracker closed 8 years ago

dnutcracker commented 8 years ago

Encountered the following exception using latest dev (1.5.1) -

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.exoplayer.upstream.Loader.a()' on a null object reference
    at com.google.android.exoplayer.extractor.ExtractorSampleSource.restartFrom(ExtractorSampleSource.java:548)
    at com.google.android.exoplayer.extractor.ExtractorSampleSource.onLoadCanceled(ExtractorSampleSour
ce.java:500)
    at com.google.android.exoplayer.upstream.Loader$LoadTask.handleMessage(Loader.java:240)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.os.HandlerThread.run(HandlerThread.java:61)
    at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

Device: samsung - SM-G900V Android API: 21

Can't say much more - but seems like ExoPlayer code should protect itself against this (probably rare) case.

ojw28 commented 8 years ago

I'm really not sure what happened in this specific case. The stack seems to imply that the source was released whilst still enabled? Did you see the crash locally, or was it reported from analytics you have? If the first of those, do you have a more complete log. There was likely a preceding failure during disable, or something? If the second, the same question applies, and also do you have an overview of how often it occurs?

More generally, we should prevent exceptions in Loader.LoadTask.handleMessage from being able to cause process death, and have them result in playback failure instead.

dnutcracker commented 8 years ago

I have the log(although the crash didn't happen locally) but unfortunately it doesn't add anything interesting. (No sign of any specific failure or anything out of the ordinary) From what I observed so far it only happened once. Another weird thing is that we use two tracking tools and only one of them was able to report this crash - The last entry in the log was that the app was paused and the crash happened ~25 minutes afterwards (!) and this probably explains why one of the tools didn't report it. Let me know if I can provide any more useful information.

dnutcracker commented 8 years ago

Any progress ? it happened again: (ExoPlayer 1.5.2)

Stack trace:
java.lang.NullPointerException
   at com.google.android.exoplayer.extractor.ExtractorSampleSource.restartFrom(ExtractorSampleSource.java:548)
   at com.google.android.exoplayer.extractor.ExtractorSampleSource.onLoadCanceled(ExtractorSampleSource.java:500)
   at com.google.android.exoplayer.upstream.Loader$LoadTask.handleMessage(Loader.java:240)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:146)

Device: Samsung SCH-I535 Android : 4.4.2

stayf commented 8 years ago

I have same NPE.

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.exoplayer.upstream.Loader.isLoading()' on a null object reference
       at com.google.android.exoplayer.extractor.ExtractorSampleSource.restartFrom(ExtractorSampleSource.java:548)
       at com.google.android.exoplayer.extractor.ExtractorSampleSource.onLoadCanceled(ExtractorSampleSource.java:500)
       at com.google.android.exoplayer.upstream.Loader$LoadTask.handleMessage(Loader.java:240)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:135)
       at android.os.HandlerThread.run(HandlerThread.java:61)
       at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)

it does not depend on the device or android version. About 20 crashes everyday from 3k user sessions(crashlytics). I saw the crash locally. It happens sometimes when i try to call "stop" in ExoPlayer.

ojw28 commented 8 years ago

Does this still happen on recent releases?

ojw28 commented 8 years ago

Closing due to lack of updates.

qqli007 commented 7 years ago

@ojw28 ,I have the detailed log,please check it.

03-14 22:33:31.602 3719 21478 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.exoplayer.upstream.Loader.isLoading()' on a null object reference

It is old lib,but I didnt find why it is.Should I update the lib?


03-14 22:33:31.482 3719 3719 I ExoPlayerImpl: Init 1.5.2 03-14 22:33:31.492 3719 3719 D NativeMediaController: setAnchorView 03-14 22:33:31.492 3719 3805 W Adreno-EGLSUB: : dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0 03-14 22:33:31.502 281 464 E BufferQueueProducer: [com.test/com.test.activity.VideoCommentFlowActivity] dequeueBuffer: can't dequeue multiple buffers without setting the buffer count 03-14 22:33:31.502 3719 3805 W Adreno-EGLSUB: : dequeue native buffer fail: Function not implemented, buffer=0x0, handle=0x0 03-14 22:33:31.502 3719 3805 W Adreno-EGL: : EGL_BAD_SURFACE 03-14 22:33:31.502 3719 3805 W OpenGLRenderer: swapBuffers encountered EGL_BAD_SURFACE on 0x8bf1eca0, halting rendering... 03-14 22:33:31.512 779 1651 I NotificationService: enqueueToast pkg=com.test callback=android.app.ITransientNotification$Stub$Proxy@3e166de1 duration=0 03-14 22:33:31.512 779 1651 D NotificationService: Show pkg=com.test callback=android.app.ITransientNotification$Stub$Proxy@2d475c56 03-14 22:33:31.542 3719 3805 E Surface : dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: -2147483646 03-14 22:33:31.542 3719 3805 W Adreno-EGLSUB: : dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0 03-14 22:33:31.542 3719 3805 E Surface : dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: -2147483646 03-14 22:33:31.552 3719 3805 W Adreno-EGLSUB: : dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0 03-14 22:33:31.552 3719 3805 W Adreno-EGL: : EGL_BAD_SURFACE 03-14 22:33:31.552 3719 3805 W OpenGLRenderer: swapBuffers encountered EGL_BAD_SURFACE on 0x91c79a80, halting rendering... 03-14 22:33:31.602 3719 21478 E : BitTube(Parcel): can't dup filedescriptor (Bad file number) 03-14 22:33:31.602 3719 21478 E Looper : Error adding epoll events for fd -9, errno=9 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: Internal runtime error. 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: java.lang.RuntimeException: Failed to initialize display event receiver. status=-2147483648 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.DisplayEventReceiver.nativeInit(Native Method) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.DisplayEventReceiver.(DisplayEventReceiver.java:61) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.Choreographer$FrameDisplayEventReceiver.(Choreographer.java:722) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.Choreographer.(Choreographer.java:180) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.Choreographer.(Choreographer.java:72) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.Choreographer$1.initialValue(Choreographer.java:98) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.Choreographer$1.initialValue(Choreographer.java:91) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:430) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at java.lang.ThreadLocal.get(ThreadLocal.java:65) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.view.Choreographer.getInstance(Choreographer.java:205) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.VideoFrameReleaseTimeHelper.enable(VideoFrameReleaseTimeHelper.java:89) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.MediaCodecVideoTrackRenderer.onEnabled(MediaCodecVideoTrackRenderer.java:226) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.TrackRenderer.enable(TrackRenderer.java:162) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.ExoPlayerImplInternal.incrementalPrepareInternal(ExoPlayerImplInternal.java:322) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:205) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.os.Handler.dispatchMessage(Handler.java:98) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.os.Looper.loop(Looper.java:141) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.os.HandlerThread.run(HandlerThread.java:61) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: Stop failed. 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.Choreographer.removeFrameCallback(android.view.Choreographer$FrameCallback)' on a null object reference 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.VideoFrameReleaseTimeHelper.disable(VideoFrameReleaseTimeHelper.java:99) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.MediaCodecVideoTrackRenderer.onDisabled(MediaCodecVideoTrackRenderer.java:279) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.TrackRenderer.disable(TrackRenderer.java:235) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.ExoPlayerImplInternal.stopAndDisable(ExoPlayerImplInternal.java:561) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:548) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:525) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:247) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.os.Handler.dispatchMessage(Handler.java:98) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.os.Looper.loop(Looper.java:141) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at android.os.HandlerThread.run(HandlerThread.java:61) 03-14 22:33:31.602 3719 21478 E ExoPlayerImplInternal: at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40) 03-14 22:33:31.602 3719 21478 E AndroidRuntime: FATAL EXCEPTION: ExoPlayerImplInternal:Handler 03-14 22:33:31.602 3719 21478 E AndroidRuntime: Process: com.test, PID: 3719 03-14 22:33:31.602 3719 21478 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.google.android.exoplayer.upstream.Loader.isLoading()' on a null object reference 03-14 22:33:31.602 3719 21478 E AndroidRuntime: at com.google.android.exoplayer.extractor.ExtractorSampleSource.restartFrom(ExtractorSampleSource.java:548) 03-14 22:33:31.602 3719 21478 E AndroidRuntime: at com.google.android.exoplayer.extractor.ExtractorSampleSource.onLoadCanceled(ExtractorSampleSource.java:500) 03-14 22:33:31.602 3719 21478 E AndroidRuntime: at com.google.android.exoplayer.upstream.Loader$LoadTask.handleMessage(Loader.java:240) 03-14 22:33:31.602 3719 21478 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102) 03-14 22:33:31.602 3719 21478 E AndroidRuntime: at android.os.Looper.loop(Looper.java:141) 03-14 22:33:31.602 3719 21478 E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:61) 03-14 22:33:31.602 3719 21478 E AndroidRuntime: at com.google.android.exoplayer.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40) 03-14 22:33:31.602 779 795 V Settings: get setting for user 0 by user 0 key:dropbox:system_app_crash 03-14 22:33:31.602 2641 2712 I octvm_klo: klo lock 03-14 22:33:31.612 779 21490 V Settings: get setting for user 0 by user 0 key:logcat_for_system_app_crash 03-14 22:33:31.612 1423 1826 I WtEventController: Receive am_crash event for pid: 3719 03-14 22:33:31.622 3719 3805 E Surface : dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: -2147483646 03-14 22:33:31.622 3719 3805 W Adreno-EGLSUB: : dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0 03-14 22:33:31.622 3719 3805 E Surface : dequeueBuffer: IGraphicBufferProducer::requestBuffer failed: -2147483646 03-14 22:33:31.622 3719 3805 W Adreno-EGLSUB: : dequeue native buffer fail: Unknown error 2147483646, buffer=0x0, handle=0x0 03-14 22:33:31.622 3719 3805 W Adreno-EGL: : EGL_BAD_SURFACE 03-14 22:33:31.622 3719 3805 W OpenGLRenderer: swapBuffers encountered EGL_BAD_SURFACE on 0x95e24ba0, halting rendering... 03-14 22:33:31.622 2641 2712 I octvm_klo: get wanted event[mask:128, name:system_app_crash@1489502011633.txt] from the watchset 03-14 22:33:31.622 2641 2712 I octvm_klo: start gathering logcat log... 03-14 22:33:31.622 779 795 V Settings: get setting for user 0 by user 0 key:send_action_app_error 03-14 22:33:31.632 1509 1628 D sysopt_manager: call notifyAMPauseActivity !!! pid : 3719 identify : 156708365 03-14 22:33:31.632 1509 1628 D SysServerManager: onAMPauseActivity activity 3719 id:156708365 03-14 22:33:31.632 1423 1826 D WtProcessController: onAMPauseActivity callback 03-14 22:33:31.632 779 805 V Settings: get setting for user 0 by user 0 key:anr_show_background 03-14 22:33:31.632 779 805 V Settings: get setting for user 0 by user 0 key:vr_mode 03-14 22:33:31.632 779 795 W ActivityManager: Force finishing activity com.test/.activity.VideoCommentFlowActivity