Repository metrics
- Stars
- (6,985 stars)
- PR merge metrics
- (No merged PRs in 30d)
Description
In my application, there will be threads that are always executing avcodec_flush_buffer,the stack is as follows "ForkJoinPool.commonPool-worker-0" #22561 daemon prio=5 os_prio=0 tid=0x0000ffff60d3a800 nid=0x7207 runnable [0x0000fffcd953a000] java.lang.Thread.State: RUNNABLE at org.bytedeco.ffmpeg.global.avcodec.avcodec_flush_buffers(Native Method) at org.bytedeco.javacv.FFmpegFrameGrabber.setTimestamp(FFmpegFrameGrabber.java:712) - locked <0x00000003e5c39f18> (a org.bytedeco.javacv.FFmpegFrameGrabber) at org.bytedeco.javacv.FFmpegFrameGrabber.setVideoTimestamp(FFmpegFrameGrabber.java:648) at com.xxx.yyy.zzz.common.impl.VideoAnalyzeService.doImageExtract(VideoAnalyzeService.java:144) at com.xxx.yyy.zzz.common.impl.VideoAnalyzeService.extractImage(VideoAnalyzeService.java:66) at com.xxx.yyy.zzz.image.stages.ImageExtractStage.handle(ImageExtractStage.java:40) at com.xxx.yyy.zzz.image.stages.ImageExtractStage.handle(ImageExtractStage.java:28)
I also found that some threads will always execute avcodec_free_context,causing other threads to keep waiting to acquire the lock occupied by the lock in this place,the stack is as follows But I found that in this thread, this object (- locked <0x000000055b950f00> (a org.bytedeco.javacv.FFmpegFrameGrabber)) keeps changing, but this thread is still executing this method (avcodec_free_context) "ForkJoinPool.commonPool-worker-5" #22591 daemon prio=5 os_prio=0 tid=0x0000ffff42f18000 nid=0x77c6 runnable [0x0000fffcd8d3b000] java.lang.Thread.State: RUNNABLE at org.bytedeco.ffmpeg.global.avcodec.avcodec_free_context(Native Method) at org.bytedeco.javacv.FFmpegFrameGrabber.releaseUnsafe(FFmpegFrameGrabber.java:206) - locked <0x000000055b950f00> (a org.bytedeco.javacv.FFmpegFrameGrabber) ----here at org.bytedeco.javacv.FFmpegFrameGrabber.release(FFmpegFrameGrabber.java:164) - locked <0x00000003c6a9cec0> (a java.lang.Class for org.bytedeco.ffmpeg.global.avcodec) at org.bytedeco.javacv.FFmpegFrameGrabber.stop(FFmpegFrameGrabber.java:1111) at org.bytedeco.javacv.FrameGrabber.close(FrameGrabber.java:517)
"ForkJoinPool.commonPool-worker-8" #22588 daemon prio=5 os_prio=0 tid=0x0000fffb189f9800 nid=0x70ab waiting for monitor entry [0x0000fffcd933a000] java.lang.Thread.State: BLOCKED (on object monitor) at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:845) - waiting to lock <0x00000003c6a9cec0> (a java.lang.Class for org.bytedeco.ffmpeg.global.avcodec) at org.bytedeco.javacv.FFmpegFrameGrabber.start(FFmpegFrameGrabber.java:841) at com.xxx.yyy.zzz.common.impl.VideoAnalyzeService.initFrameGrabber(VideoAnalyzeService.java:111) at com.xxx.yyy.zzz.main.stages.VideoInfoAnalyzeStage.handle(VideoInfoAnalyzeStage.java:71)
These phenomena have caused the forkjoin thread pool in my entire application to freeze. Can you help analyze this problem?