After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 785124 - decklinksrc: Deadlock on EOS since 523de1a9dc7b7f79c78120bed15c364336f067cb
decklinksrc: Deadlock on EOS since 523de1a9dc7b7f79c78120bed15c364336f067cb
Status: RESOLVED INVALID
Product: GStreamer
Classification: Platform
Component: gst-plugins-bad
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2017-07-19 13:17 UTC by Vivia Nikolaidou
Modified: 2017-07-19 17:11 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Vivia Nikolaidou 2017-07-19 13:17:21 UTC
I get the following backtrace on EOS:

Thread 4 (Thread 0x7fee2a68f700 (LWP 14167))

  • #0 __lll_lock_wait
    at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S line 135
  • #1 __GI___pthread_mutex_lock
    at ../nptl/pthread_mutex_lock.c line 115
  • #2 gst_base_src_send_event
    at gstbasesrc.c line 1852
  • #3 gst_element_send_event
    at gstelement.c line 1656
  • #4 gst_bin_send_event
    at gstbin.c line 3141
  • #5 gst_element_send_event
    at gstelement.c line 1656
  • #6 _send_eos

523de1a9dc7b7f79c78120bed15c364336f067cb is the first bad commit
commit 523de1a9dc7b7f79c78120bed15c364336f067cb
Author: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Date:   Thu Jun 1 10:36:26 2017 -0400

    basesrc: Don't hold LIVE_LOCK in create/alloc/fill
    
    Holding this lock on live source prevents the source from changing
    the caps in ::create() without risking a deadlock. This has consequences
    as the LIVE_LOCK was replacing the STREAM_LOCK in many situation. As a
    side effect:
    
    - We no longer need to unlock when doing play/pause as the LIVE_LOCK
      isn't held. We then let the create() call finish, but will block if
      the state have changed meanwhile. This has the benefit that
      wait_preroll() calls in subclass is no longer needed.
    - We no longer need to change the state to unlock, simplifying the
      set_flushing() interface
    - We need different handling for EOS depending if we are in push or pull
      mode.
    
    This patch also document the locking of each private class member and
    the locking order.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=783301

Reverting commits 523de1a9dc7b7f79c78120bed15c364336f067cb , 2be51ba60ce718b6febf5c1bd40ca761c17bfb80 and dd5905c31a3b385cd4ee51141fccb072e04e8239 fixes the issue.

Haven't yet found a way to reproduce it with upstream-only stuff - if something turns up I'll let you know!
Comment 1 Nicolas Dufresne (ndufresne) 2017-07-19 13:40:04 UTC
I'll have a look at the backtrace, but meanwhile if you could describe what you are doing prior to the deadlock it would be useful.
Comment 2 Nicolas Dufresne (ndufresne) 2017-07-19 13:43:01 UTC
(In reply to Vivia Nikolaidou from comment #0)
> I get the following backtrace on EOS:

- Can you provide full back trace please, just 1 thread isn't useful for looking up deadlock.
- The backtrace seems truncated, what's before  _send_eos ?
- What thread is thread 4 ?
- Is you pipeline in paused state ?
Comment 3 Vivia Nikolaidou 2017-07-19 14:02:40 UTC
I am using the LTC patch for timecodestamper as per https://bugzilla.gnome.org/show_bug.cgi?id=784295 .

Thread 40 (Thread 0x7fb5e8ff9700 (LWP 7025))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait_until
    at ././glib/gthread-posix.c line 1442
  • #2 g_async_queue_pop_intern_unlocked
    at ././glib/gasyncqueue.c line 422
  • #3 g_async_queue_timeout_pop
    at ././glib/gasyncqueue.c line 543
  • #4 g_thread_pool_wait_for_new_pool
    at ././glib/gthreadpool.c line 167
  • #5 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 364
  • #6 g_thread_proxy
    at ././glib/gthread.c line 784
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 39 (Thread 0x7fb5f0fea700 (LWP 7018))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_parallelized_task_thread_func
    at video-converter.c line 175
  • #3 g_thread_proxy
    at ././glib/gthread.c line 784
  • #4 start_thread
    at pthread_create.c line 333
  • #5 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 38 (Thread 0x7fb5f17eb700 (LWP 7017))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_parallelized_task_thread_func
    at video-converter.c line 175
  • #3 g_thread_proxy
    at ././glib/gthread.c line 784
  • #4 start_thread
    at pthread_create.c line 333
  • #5 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 37 (Thread 0x7fb5f1fec700 (LWP 7016))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_parallelized_task_thread_func
    at video-converter.c line 175
  • #3 g_thread_proxy
    at ././glib/gthread.c line 784
  • #4 start_thread
    at pthread_create.c line 333
  • #5 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 36 (Thread 0x7fb5f27ed700 (LWP 7015))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_parallelized_task_thread_func
    at video-converter.c line 175
  • #3 g_thread_proxy
    at ././glib/gthread.c line 784
  • #4 start_thread
    at pthread_create.c line 333
  • #5 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 35 (Thread 0x7fb5f2fee700 (LWP 7014))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_parallelized_task_thread_func
    at video-converter.c line 175
  • #3 g_thread_proxy
    at ././glib/gthread.c line 784
  • #4 start_thread
    at pthread_create.c line 333
  • #5 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 34 (Thread 0x7fb5f37ef700 (LWP 7013))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_queue_loop
    at gstqueue.c line 1505
  • #3 gst_task_func
    at gsttask.c line 332
  • #4 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #5 g_thread_proxy
    at ././glib/gthread.c line 784
  • #6 start_thread
    at pthread_create.c line 333
  • #7 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 31 (Thread 0x7fb613fff700 (LWP 7009))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_decklink_video_src_create(GstPushSrc*, GstBuffer**)
    at gstdecklinkvideosrc.cpp line 755
  • #3 gst_base_src_get_range
    at gstbasesrc.c line 2498
  • #4 gst_base_src_loop
    at gstbasesrc.c line 2798
  • #5 gst_task_func
    at gsttask.c line 332
  • #6 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #7 g_thread_proxy
    at ././glib/gthread.c line 784
  • #8 start_thread
    at pthread_create.c line 333
  • #9 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 30 (Thread 0x7fb630fe9700 (LWP 7008))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_decklink_audio_src_create(GstPushSrc*, GstBuffer**)
    at gstdecklinkaudiosrc.cpp line 566
  • #3 gst_base_src_get_range
    at gstbasesrc.c line 2498
  • #4 gst_base_src_loop
    at gstbasesrc.c line 2798
  • #5 gst_task_func
    at gsttask.c line 332
  • #6 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #7 g_thread_proxy
    at ././glib/gthread.c line 784
  • #8 start_thread
    at pthread_create.c line 333
  • #9 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 29 (Thread 0x7fb6317ea700 (LWP 7007))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_videoframe_audiolevel_asink_chain
    at gstvideoframe-audiolevel.c line 628
  • #3 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #4 gst_pad_push_data
    at gstpad.c line 4457
  • #5 gst_pad_push
    at gstpad.c line 4576
  • #6 gst_queue_push_one
    at gstqueue.c line 1365
  • #7 gst_queue_loop
    at gstqueue.c line 1517
  • #8 gst_task_func
    at gsttask.c line 332
  • #9 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #10 g_thread_proxy
    at ././glib/gthread.c line 784
  • #11 start_thread
    at pthread_create.c line 333
  • #12 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 28 (Thread 0x7fb631feb700 (LWP 7006))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_queue_loop
    at gstqueue.c line 1505
  • #3 gst_task_func
    at gsttask.c line 332
  • #4 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #5 g_thread_proxy
    at ././glib/gthread.c line 784
  • #6 start_thread
    at pthread_create.c line 333
  • #7 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 27 (Thread 0x7fb6327ec700 (LWP 7005))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_queue_chain_buffer_or_list
    at gstqueue.c line 1228
  • #3 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #4 gst_pad_push_data
    at gstpad.c line 4457
  • #5 gst_pad_push
    at gstpad.c line 4576
  • #6 gst_base_src_loop
    at gstbasesrc.c line 2912
  • #7 gst_task_func
    at gsttask.c line 332
  • #8 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #9 g_thread_proxy
    at ././glib/gthread.c line 784
  • #10 start_thread
    at pthread_create.c line 333
  • #11 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 26 (Thread 0x7fb632fed700 (LWP 7004))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_timecodestamper_ltcpad_chain
    at gsttimecodestamper.c line 761
  • #3 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #4 gst_pad_push_data
    at gstpad.c line 4457
  • #5 gst_pad_push
    at gstpad.c line 4576
  • #6 gst_base_transform_chain
    at gstbasetransform.c line 2312
  • #7 gst_pad_chain_data_unchecked
    at gstpad.c line 4205
  • #8 gst_pad_push_data
    at gstpad.c line 4457
  • #9 gst_pad_push
    at gstpad.c line 4576
  • #10 gst_queue_push_one
    at gstqueue.c line 1365
  • #11 gst_queue_loop
    at gstqueue.c line 1517
  • #12 gst_task_func
    at gsttask.c line 332
  • #13 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #14 g_thread_proxy
    at ././glib/gthread.c line 784
  • #15 start_thread
    at pthread_create.c line 333
  • #16 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 24 (Thread 0x7fb633fef700 (LWP 7002))

  • #0 syscall
    at ../sysdeps/unix/sysv/linux/x86_64/syscall.S line 38
  • #1 g_cond_wait
    at ././glib/gthread-posix.c line 1395
  • #2 gst_queue_loop
    at gstqueue.c line 1505
  • #3 gst_task_func
    at gsttask.c line 332
  • #4 g_thread_pool_thread_proxy
    at ././glib/gthreadpool.c line 307
  • #5 g_thread_proxy
    at ././glib/gthread.c line 784
  • #6 start_thread
    at pthread_create.c line 333
  • #7 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 23 (Thread 0x7fb6347f0700 (LWP 7001))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 22 (Thread 0x7fb634ff1700 (LWP 7000))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsign ed long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 21 (Thread 0x7fb6357f2700 (LWP 6999))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 20 (Thread 0x7fb635ff3700 (LWP 6998))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 19 (Thread 0x7fb6367f4700 (LWP 6997))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 18 (Thread 0x7fb636ff5700 (LWP 6996))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 17 (Thread 0x7fb6377f6700 (LWP 6995))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 16 (Thread 0x7fb637ff7700 (LWP 6994))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 15 (Thread 0x7fb6387f8700 (LWP 6993))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 14 (Thread 0x7fb638ff9700 (LWP 6992))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 13 (Thread 0x7fb6397fa700 (LWP 6991))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 12 (Thread 0x7fb639ffb700 (LWP 6990))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 11 (Thread 0x7fb63a7fc700 (LWP 6989))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 10 (Thread 0x7fb63affd700 (LWP 6988))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 9 (Thread 0x7fb63b7fe700 (LWP 6987))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 8 (Thread 0x7fb63bfff700 (LWP 6986))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 7 (Thread 0x7fb654dc4700 (LWP 6985))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkOutput::DriverNotificationThread()
  • #6 CDeckLinkOutput::DriverNotificationThreadFunction(void*)
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 6 (Thread 0x7fb6555c5700 (LWP 6984))

  • #0 ioctl
    at ../sysdeps/unix/syscall-template.S line 84
  • #1 IoctlMessageUser::call(int, IoctlArguments*)
  • #2 BlackmagicIOIoctlMessageUser::call(int, IoctlArguments*)
  • #3 IoctlMessageUser::writeScalarReadScalar(int, unsigned long const*, unsigned long, unsigned long*, unsigned long)
  • #4 WaitForNotificationEvents
  • #5 CDeckLinkNotification::run()
  • #6 0x00007fb65569e339 in
  • #7 start_thread
    at pthread_create.c line 333
  • #8 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Thread 4 (Thread 0x7fb65f583700 (LWP 6976))

  • #0 __lll_lock_wait
    at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S line 135
  • #1 __GI___pthread_mutex_lock
    at ../nptl/pthread_mutex_lock.c line 115
  • #2 gst_base_src_send_event
    at gstbasesrc.c line 1852
  • #3 gst_element_send_event
    at gstelement.c line 1656
  • #4 gst_bin_send_event
    at gstbin.c line 3141
  • #5 gst_element_send_event
    at gstelement.c line 1656
  • #6 _send_eos
  • #18 0x00007fb66a0d98d3 in
  • #19 start_thread
    at pthread_create.c line 333
  • #20 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 97

Comment 4 Vivia Nikolaidou 2017-07-19 14:03:35 UTC
Also the pipeline is in PLAYING state.
Comment 5 Vivia Nikolaidou 2017-07-19 14:04:21 UTC
Just noticed that threads below 4 got truncated.


Comment 6 Vivia Nikolaidou 2017-07-19 14:04:59 UTC



Comment 7 Vivia Nikolaidou 2017-07-19 14:05:52 UTC
Okay, that's really a bug in Bugzilla itself? Here it is: https://paste.debian.net/977200/
Comment 8 Nicolas Dufresne (ndufresne) 2017-07-19 14:23:41 UTC
Despite the unlock/unlock_stop implementation being decent, it appears that decklinkaudiosrc or decklinkvideosrc didn't return from ->create() and that's what caused the observed deadlock. Marking as a decklinksrc bug for now, this need further investigation.
Comment 9 Sebastian Dröge (slomo) 2017-07-19 16:50:14 UTC
It is pulsesrc that is deadlocking on the stream-lock when receiving the EOS event. While it is flushing basesrc upon receiving EOS, this is only unlocking the source itself but not if it is blocked downstream: in this case pulesrc is blocked downstream by a full queue. And until that queue accepts another buffer, the EOS event will wait.
Comment 10 Vivia Nikolaidou 2017-07-19 17:11:44 UTC
See https://bugzilla.gnome.org/show_bug.cgi?id=784295#c5