GNOME Bugzilla – Bug 536856
rtpmanager deadlocks when receiving new data while going to NULL
Last modified: 2008-06-10 07:46:21 UTC
I've experienced deadlocks when changing pipeline state to NULL while pushing the first buffer for a session. So far this has been tricky to reproduce reliably depending on different OSes / hardware combinations. Because of this I put together a small torture application that makes it reliably reproducible. It hooks up an arbitrary number of simulated streams and uses pad-probes with synchronization logic to wait for all of them to be ready to push their first buffer, where one group is standing by to push their first buffer into rtpbin and the other group is standing by to push the first buffer into the sink. When all of them are ready to push they get unblocked simultaneously by the controlling thread, and the controlling thread follows it by an optional configurable delay and then an immediate state change to NULL. This is repeated with an outer loop that changes that configurable delay from none to 100 ms, with an inner loop that varies the number of streams from 1 to 128 (actually 2 to 256 in total, as it's the number of streams in each group -- one group blocking before pushing to rtpbin and the other group blocking before pushing to the sink). I haven't managed to make the inner loop get further than about 30, fewer if running it in gdb or on Windows, so it's very easy to reproduce. Will attach the test code used.
Forgot to mention that the outer loop never makes it through the first iteration.
Created attachment 112232 [details] Test application that reliably reproduces the deadlock Or better, check out the self-contained module through: bzr branch lp:~oleavr/+junk/rtpheisenapp After some code review it should probably be turned it into a unittest for rtpmanager.
Created attachment 112234 [details] Slightly cleaner version of the test application
Just reproduced it with very few streams, usually it takes a higher number of streams, but high system load seems to have done my a favour -- a total of only eight streams this time, four doing their first push before and four after rtpbin. Interesting threads: > libgthread-2.0-0.dll!g_mutex_lock_win32_cs_impl(_GMutex * mutex=0x02cdd9a8) Line 125 + 0xe bytes C libglib-2.0-0.dll!g_static_rec_mutex_lock(_GStaticRecMutex * mutex=0x02cb4a98) Line 312 + 0x3f bytes C libgstreamer-0.10-0.dll!post_activate(_GstPad * pad=0x036949c8, GstActivateMode new_mode=GST_ACTIVATE_NONE) Line 607 + 0xc bytes C libgstreamer-0.10-0.dll!gst_pad_activate_push(_GstPad * pad=0x036949c8, int active=0) Line 903 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_set_active(_GstPad * pad=0x036949c8, int active=0) Line 665 + 0xb bytes C libgstreamer-0.10-0.dll!activate_pads(_GstPad * pad=0x036949c8, _GValue * ret=0x0012e5d0, int * active=0x0012e6fc) Line 2512 + 0xf bytes C libgstreamer-0.10-0.dll!gst_iterator_fold(_GstIterator * it=0x036b7f08, int (void *, _GValue *, void *)* func=0x00c25160, _GValue * ret=0x0012e5d0, void * user_data=0x0012e6fc) Line 502 + 0x11 bytes C libgstreamer-0.10-0.dll!iterator_activate_fold_with_resync(_GstIterator * iter=0x036b7f08, int (void *, _GValue *, void *)* func=0x00c25160, void * user_data=0x0012e6fc) Line 2544 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_element_pads_activate(_GstElement * element=0x036812f8, int active=0) Line 2590 + 0x12 bytes C libgstreamer-0.10-0.dll!gst_element_change_state_func(_GstElement * element=0x036812f8, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 2666 + 0xb bytes C libgstrtpmanager.dll!gst_rtp_ssrc_demux_change_state(_GstElement * element=0x036812f8, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 713 + 0x27 bytes C libgstreamer-0.10-0.dll!gst_element_change_state(_GstElement * element=0x036812f8, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 2428 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_element_set_state_func(_GstElement * element=0x036812f8, GstState state=GST_STATE_READY) Line 2378 + 0xd bytes C libgstreamer-0.10-0.dll!gst_element_set_state(_GstElement * element=0x036812f8, GstState state=GST_STATE_READY) Line 2281 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_bin_element_set_state(_GstBin * bin=0x0367a360, _GstElement * element=0x036812f8, unsigned __int64 base_time=1212735480909761000, GstState current=GST_STATE_PAUSED, GstState next=GST_STATE_READY) Line 1932 + 0xd bytes C libgstreamer-0.10-0.dll!gst_bin_change_state_func(_GstElement * element=0x0367a360, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 2183 + 0x20 bytes C libgstrtpmanager.dll!gst_rtp_bin_change_state(_GstElement * element=0x0367a360, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 1735 + 0x27 bytes C libgstreamer-0.10-0.dll!gst_element_change_state(_GstElement * element=0x0367a360, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 2428 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_element_set_state_func(_GstElement * element=0x0367a360, GstState state=GST_STATE_READY) Line 2378 + 0xd bytes C libgstreamer-0.10-0.dll!gst_element_set_state(_GstElement * element=0x0367a360, GstState state=GST_STATE_READY) Line 2281 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_bin_element_set_state(_GstBin * bin=0x03678338, _GstElement * element=0x0367a360, unsigned __int64 base_time=1212735480909761000, GstState current=GST_STATE_PAUSED, GstState next=GST_STATE_READY) Line 1932 + 0xd bytes C libgstreamer-0.10-0.dll!gst_bin_change_state_func(_GstElement * element=0x03678338, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 2183 + 0x20 bytes C libgstreamer-0.10-0.dll!gst_pipeline_change_state(_GstElement * element=0x03678338, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 463 + 0x27 bytes C libgstreamer-0.10-0.dll!gst_element_change_state(_GstElement * element=0x03678338, GstStateChange transition=GST_STATE_CHANGE_PAUSED_TO_READY) Line 2428 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_element_continue_state(_GstElement * element=0x03678338, GstStateChangeReturn ret=GST_STATE_CHANGE_NO_PREROLL) Line 2135 + 0xd bytes C libgstreamer-0.10-0.dll!gst_element_change_state(_GstElement * element=0x03678338, GstStateChange transition=GST_STATE_CHANGE_PLAYING_TO_PAUSED) Line 2472 + 0xd bytes C libgstreamer-0.10-0.dll!gst_element_set_state_func(_GstElement * element=0x03678338, GstState state=GST_STATE_NULL) Line 2378 + 0xd bytes C libgstreamer-0.10-0.dll!gst_element_set_state(_GstElement * element=0x03678338, GstState state=GST_STATE_NULL) Line 2281 + 0x15 bytes C rtpheisenapp.exe!stream_controller_run(_StreamController * ctlr=0x01bc46e8, unsigned int stream_count_front=4, unsigned int stream_count_back=4, unsigned int teardown_delay=0) Line 426 + 0xd bytes C > libgthread-2.0-0.dll!g_mutex_lock_win32_cs_impl(_GMutex * mutex=0x02cdf018) Line 125 + 0xe bytes C libglib-2.0-0.dll!g_static_rec_mutex_lock(_GStaticRecMutex * mutex=0x02c8e1a8) Line 312 + 0x3f bytes C libgstrtpmanager.dll!new_ssrc_pad_found(_GstElement * element=0x036812f8, unsigned int ssrc=2382935637, _GstPad * pad=0x036a6c00, _GstRtpBinSession * session=0x02cb4630) Line 1870 + 0x29 bytes C libgstrtpmanager.dll!gst_rtp_bin_marshal_VOID__UINT_OBJECT(_GClosure * closure=0x02cb6050, _GValue * return_value=0x00000000, unsigned int n_param_values=3, const _GValue * param_values=0x03e6d9c0, void * invocation_hint=0x03e6d6c0, void * marshal_data=0x00000000) Line 203 + 0x1b bytes C libgobject-2.0-0.dll!g_closure_invoke(_GClosure * closure=0x02cb6050, _GValue * return_value=0x00000000, unsigned int n_param_values=3, const _GValue * param_values=0x03e6d9c0, void * invocation_hint=0x03e6d6c0) Line 494 + 0x1d bytes C libgobject-2.0-0.dll!signal_emit_unlocked_R(_SignalNode * node=0x02c54200, unsigned int detail=0, void * instance=0x036812f8, _GValue * emission_return=0x00000000, const _GValue * instance_and_params=0x03e6d9c0) Line 2444 + 0x2d bytes C libgobject-2.0-0.dll!g_signal_emit_valist(void * instance=0x036812f8, unsigned int signal_id=61, unsigned int detail=0, char * var_args=0x03e6dc5c) Line 2199 + 0x1a bytes C libgobject-2.0-0.dll!g_signal_emit(void * instance=0x036812f8, unsigned int signal_id=61, unsigned int detail=0, ...) Line 2243 + 0x15 bytes C libgstrtpmanager.dll!create_demux_pad_for_ssrc(_GstRtpSsrcDemux * demux=0x036812f8, unsigned int ssrc=2382935637, unsigned __int64 timestamp=9000000) Line 240 + 0x25 bytes C libgstrtpmanager.dll!gst_rtp_ssrc_demux_chain(_GstPad * pad=0x036949c8, _GstBuffer * buf=0x03679dc8) Line 510 + 0x18 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x036949c8, _GstBuffer * buffer=0x03679dc8) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x03694548, _GstBuffer * buffer=0x03679dc8) Line 3796 + 0xd bytes C libgstrtpmanager.dll!gst_rtp_session_process_rtp(_RTPSession * sess=0x0367f458, _RTPSource * src=0x036b85f0, _GstBuffer * buffer=0x03679dc8, void * user_data=0x0367e510) Line 1103 + 0x13 bytes C libgstrtpmanager.dll!source_push_rtp(_RTPSource * source=0x036b85f0, _GstBuffer * buffer=0x03679dc8, _RTPSession * session=0x0367f458) Line 855 + 0x23 bytes C libgstrtpmanager.dll!push_packet(_RTPSource * src=0x036b85f0, _GstBuffer * buffer=0x03679dc8) Line 713 + 0x1f bytes C libgstrtpmanager.dll!rtp_source_process_rtp(_RTPSource * src=0x036b85f0, _GstBuffer * buffer=0x03679c68, RTPArrivalStats * arrival=0x03e6e64c) Line 947 + 0xd bytes C libgstrtpmanager.dll!rtp_session_process_rtp(_RTPSession * sess=0x0367f458, _GstBuffer * buffer=0x03679c68, unsigned __int64 ntpnstime=3421724280959761000) Line 1333 + 0x14 bytes C libgstrtpmanager.dll!gst_rtp_session_chain_recv_rtp(_GstPad * pad=0x03694488, _GstBuffer * buffer=0x03679c68) Line 1460 + 0x18 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x03694488, _GstBuffer * buffer=0x03679c68) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x0367b4b0, _GstBuffer * buffer=0x03679c68) Line 3796 + 0xd bytes C libgstreamer-0.10-0.dll!gst_proxy_pad_do_chain(_GstPad * pad=0x0368c2b8, _GstBuffer * buffer=0x03679c68) Line 193 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x0368c2b8, _GstBuffer * buffer=0x03679c68) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x03691f18, _GstBuffer * buffer=0x03679c68) Line 3796 + 0xd bytes C libgstrtp-0.10-0.dll!gst_basertppayload_push(_GstBaseRTPPayload * payload=0x0367d4c0, _GstBuffer * buffer=0x03679c68) Line 682 + 0x13 bytes C libgstrtp-0.10-0.dll!gst_base_rtp_audio_payload_push(_GstBaseRTPAudioPayload * baseaudiopayload=0x0367d4c0, const unsigned char * data=0x02ce41d0, unsigned int payload_len=320, unsigned __int64 timestamp=49000000) Line 618 + 0xd bytes C libgstrtp-0.10-0.dll!gst_base_rtp_audio_payload_handle_sample_based_buffer(_GstBaseRTPPayload * basepayload=0x0367d4c0, _GstBuffer * buffer=0x03679d70) Line 524 + 0x22 bytes C libgstrtp-0.10-0.dll!gst_base_rtp_audio_payload_handle_buffer(_GstBaseRTPPayload * basepayload=0x0367d4c0, _GstBuffer * buffer=0x03679d70) Line 301 + 0xd bytes C libgstrtp-0.10-0.dll!gst_basertppayload_chain(_GstPad * pad=0x03694308, _GstBuffer * buffer=0x03679d70) Line 399 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x03694308, _GstBuffer * buffer=0x03679d70) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x03691e58, _GstBuffer * buffer=0x03679d70) Line 3796 + 0xd bytes C libgstalaw.dll!gst_alaw_enc_chain(_GstPad * pad=0x03691858, _GstBuffer * buffer=0x03679e20) Line 487 + 0x13 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x03691858, _GstBuffer * buffer=0x03679e20) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x03691798, _GstBuffer * buffer=0x03679e20) Line 3796 + 0xd bytes C libgstbase-0.10-0.dll!gst_base_src_loop(_GstPad * pad=0x03691798) Line 2193 + 0xd bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d090, _GstTaskClass * tclass=0x01be86c0) Line 192 + 0x11 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02cb7688) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x02cb74b8) Line 478 + 0x10 bytes C > libgthread-2.0-0.dll!g_mutex_lock_win32_cs_impl(_GMutex * mutex=0x02cdf018) Line 125 + 0xe bytes C libglib-2.0-0.dll!g_static_rec_mutex_lock(_GStaticRecMutex * mutex=0x02c8e1a8) Line 312 + 0x3f bytes C libgstrtpmanager.dll!new_ssrc_pad_found(_GstElement * element=0x036813f0, unsigned int ssrc=666463133, _GstPad * pad=0x036a6300, _GstRtpBinSession * session=0x02cceb68) Line 1870 + 0x29 bytes C libgstrtpmanager.dll!gst_rtp_bin_marshal_VOID__UINT_OBJECT(_GClosure * closure=0x0369d6c8, _GValue * return_value=0x00000000, unsigned int n_param_values=3, const _GValue * param_values=0x0406d9c0, void * invocation_hint=0x0406d6c0, void * marshal_data=0x00000000) Line 203 + 0x1b bytes C libgobject-2.0-0.dll!g_closure_invoke(_GClosure * closure=0x0369d6c8, _GValue * return_value=0x00000000, unsigned int n_param_values=3, const _GValue * param_values=0x0406d9c0, void * invocation_hint=0x0406d6c0) Line 494 + 0x1d bytes C libgobject-2.0-0.dll!signal_emit_unlocked_R(_SignalNode * node=0x02c54200, unsigned int detail=0, void * instance=0x036813f0, _GValue * emission_return=0x00000000, const _GValue * instance_and_params=0x0406d9c0) Line 2444 + 0x2d bytes C libgobject-2.0-0.dll!g_signal_emit_valist(void * instance=0x036813f0, unsigned int signal_id=61, unsigned int detail=0, char * var_args=0x0406dc5c) Line 2199 + 0x1a bytes C libgobject-2.0-0.dll!g_signal_emit(void * instance=0x036813f0, unsigned int signal_id=61, unsigned int detail=0, ...) Line 2243 + 0x15 bytes C libgstrtpmanager.dll!create_demux_pad_for_ssrc(_GstRtpSsrcDemux * demux=0x036813f0, unsigned int ssrc=666463133, unsigned __int64 timestamp=12000000) Line 240 + 0x25 bytes C libgstrtpmanager.dll!gst_rtp_ssrc_demux_chain(_GstPad * pad=0x0367c490, _GstBuffer * buf=0x036964e0) Line 510 + 0x18 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x0367c490, _GstBuffer * buffer=0x036964e0) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x0367ce50, _GstBuffer * buffer=0x036964e0) Line 3796 + 0xd bytes C libgstrtpmanager.dll!gst_rtp_session_process_rtp(_RTPSession * sess=0x0367f5c0, _RTPSource * src=0x02cefd18, _GstBuffer * buffer=0x036964e0, void * user_data=0x0367e698) Line 1103 + 0x13 bytes C libgstrtpmanager.dll!source_push_rtp(_RTPSource * source=0x02cefd18, _GstBuffer * buffer=0x036964e0, _RTPSession * session=0x0367f5c0) Line 855 + 0x23 bytes C libgstrtpmanager.dll!push_packet(_RTPSource * src=0x02cefd18, _GstBuffer * buffer=0x036964e0) Line 713 + 0x1f bytes C libgstrtpmanager.dll!rtp_source_process_rtp(_RTPSource * src=0x02cefd18, _GstBuffer * buffer=0x03696430, RTPArrivalStats * arrival=0x0406e64c) Line 947 + 0xd bytes C libgstrtpmanager.dll!rtp_session_process_rtp(_RTPSession * sess=0x0367f5c0, _GstBuffer * buffer=0x03696430, unsigned __int64 ntpnstime=3421724280962761000) Line 1333 + 0x14 bytes C libgstrtpmanager.dll!gst_rtp_session_chain_recv_rtp(_GstPad * pad=0x0367c0d0, _GstBuffer * buffer=0x03696430) Line 1460 + 0x18 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x0367c0d0, _GstBuffer * buffer=0x03696430) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x0367b0c8, _GstBuffer * buffer=0x03696430) Line 3796 + 0xd bytes C libgstreamer-0.10-0.dll!gst_proxy_pad_do_chain(_GstPad * pad=0x0368c398, _GstBuffer * buffer=0x03696430) Line 193 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x0368c398, _GstBuffer * buffer=0x03696430) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x03694788, _GstBuffer * buffer=0x03696430) Line 3796 + 0xd bytes C libgstrtp-0.10-0.dll!gst_basertppayload_push(_GstBaseRTPPayload * payload=0x0367d650, _GstBuffer * buffer=0x03696430) Line 682 + 0x13 bytes C libgstrtp-0.10-0.dll!gst_base_rtp_audio_payload_push(_GstBaseRTPAudioPayload * baseaudiopayload=0x0367d650, const unsigned char * data=0x02ce6ba0, unsigned int payload_len=320, unsigned __int64 timestamp=52000000) Line 618 + 0xd bytes C libgstrtp-0.10-0.dll!gst_base_rtp_audio_payload_handle_sample_based_buffer(_GstBaseRTPPayload * basepayload=0x0367d650, _GstBuffer * buffer=0x03696590) Line 524 + 0x22 bytes C libgstrtp-0.10-0.dll!gst_base_rtp_audio_payload_handle_buffer(_GstBaseRTPPayload * basepayload=0x0367d650, _GstBuffer * buffer=0x03696590) Line 301 + 0xd bytes C libgstrtp-0.10-0.dll!gst_basertppayload_chain(_GstPad * pad=0x03694908, _GstBuffer * buffer=0x03696590) Line 399 + 0x15 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x03694908, _GstBuffer * buffer=0x03696590) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x036946c8, _GstBuffer * buffer=0x03696590) Line 3796 + 0xd bytes C libgstalaw.dll!gst_alaw_enc_chain(_GstPad * pad=0x03694248, _GstBuffer * buffer=0x03696538) Line 487 + 0x13 bytes C libgstreamer-0.10-0.dll!gst_pad_chain_unchecked(_GstPad * pad=0x03694248, _GstBuffer * buffer=0x03696538) Line 3628 + 0xd bytes C libgstreamer-0.10-0.dll!gst_pad_push(_GstPad * pad=0x036940c8, _GstBuffer * buffer=0x03696538) Line 3796 + 0xd bytes C libgstbase-0.10-0.dll!gst_base_src_loop(_GstPad * pad=0x036940c8) Line 2193 + 0xd bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d1d0, _GstTaskClass * tclass=0x01be86c0) Line 192 + 0x11 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02ccbfc0) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x02ccbdf0) Line 478 + 0x10 bytes C Innocent threads: > libgthread-2.0-0.dll!g_cond_wait_internal(_GCond * cond=0x02c8d5f0, _GMutex * entered_mutex=0x02c8d5b0, unsigned long milliseconds=4294967295) Line 245 + 0x10 bytes C libgthread-2.0-0.dll!g_cond_wait_win32_impl(_GCond * cond=0x02c8d5f0, _GMutex * entered_mutex=0x02c8d5b0) Line 283 + 0xf bytes C libgstbase-0.10-0.dll!gst_base_src_wait_playing(_GstBaseSrc * src=0x02c8afc8) Line 477 + 0x2b bytes C libgstbase-0.10-0.dll!gst_base_src_get_range(_GstBaseSrc * src=0x02c8afc8, unsigned __int64 offset=18446744073709551615, unsigned int length=4096, _GstBuffer * * buf=0x0426fb64) Line 1828 + 0x9 bytes C libgstbase-0.10-0.dll!gst_base_src_loop(_GstPad * pad=0x0367c6d0) Line 2100 + 0x19 bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d310, _GstTaskClass * tclass=0x01be86c0) Line 192 + 0x11 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02ce0ed8) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x02ce0f40) Line 478 + 0x10 bytes C > libgthread-2.0-0.dll!g_cond_wait_internal(_GCond * cond=0x02ce0df0, _GMutex * entered_mutex=0x02ce0db0, unsigned long milliseconds=4294967295) Line 245 + 0x10 bytes C libgthread-2.0-0.dll!g_cond_wait_win32_impl(_GCond * cond=0x02ce0df0, _GMutex * entered_mutex=0x02ce0db0) Line 283 + 0xf bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d2c0, _GstTaskClass * tclass=0x01be86c0) Line 180 + 0x25 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02ce06a0) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x02ce0708) Line 478 + 0x10 bytes C > libgthread-2.0-0.dll!g_cond_wait_internal(_GCond * cond=0x02cc99d0, _GMutex * entered_mutex=0x02cc9990, unsigned long milliseconds=4294967295) Line 245 + 0x10 bytes C libgthread-2.0-0.dll!g_cond_wait_win32_impl(_GCond * cond=0x02cc99d0, _GMutex * entered_mutex=0x02cc9990) Line 283 + 0xf bytes C libgstbase-0.10-0.dll!gst_base_src_wait_playing(_GstBaseSrc * src=0x02cc7550) Line 477 + 0x2b bytes C libgstbase-0.10-0.dll!gst_base_src_get_range(_GstBaseSrc * src=0x02cc7550, unsigned __int64 offset=18446744073709551615, unsigned int length=4096, _GstBuffer * * buf=0x03b6fb64) Line 1828 + 0x9 bytes C libgstbase-0.10-0.dll!gst_base_src_loop(_GstPad * pad=0x0367ccd0) Line 2100 + 0x19 bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d040, _GstTaskClass * tclass=0x01be86c0) Line 192 + 0x11 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02ca1690) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x0368b7a8) Line 478 + 0x10 bytes C > libgthread-2.0-0.dll!g_cond_wait_internal(_GCond * cond=0x02cb10a8, _GMutex * entered_mutex=0x02cb1068, unsigned long milliseconds=4294967295) Line 245 + 0x10 bytes C libgthread-2.0-0.dll!g_cond_wait_win32_impl(_GCond * cond=0x02cb10a8, _GMutex * entered_mutex=0x02cb1068) Line 283 + 0xf bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d130, _GstTaskClass * tclass=0x01be86c0) Line 180 + 0x25 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02ca1f00) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x02ca1d30) Line 478 + 0x10 bytes C > libgthread-2.0-0.dll!g_cond_wait_internal(_GCond * cond=0x02cb0968, _GMutex * entered_mutex=0x02cb0928, unsigned long milliseconds=4294967295) Line 245 + 0x10 bytes C libgthread-2.0-0.dll!g_cond_wait_win32_impl(_GCond * cond=0x02cb0968, _GMutex * entered_mutex=0x02cb0928) Line 283 + 0xf bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d0e0, _GstTaskClass * tclass=0x01be86c0) Line 180 + 0x25 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02ca5610) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x02ca6a80) Line 478 + 0x10 bytes C > libgthread-2.0-0.dll!g_cond_wait_internal(_GCond * cond=0x0369e350, _GMutex * entered_mutex=0x0369e310, unsigned long milliseconds=4294967295) Line 245 + 0x10 bytes C libgthread-2.0-0.dll!g_cond_wait_win32_impl(_GCond * cond=0x0369e350, _GMutex * entered_mutex=0x0369e310) Line 283 + 0xf bytes C libgstbase-0.10-0.dll!gst_base_src_wait_playing(_GstBaseSrc * src=0x02cbd108) Line 477 + 0x2b bytes C libgstbase-0.10-0.dll!gst_base_src_get_range(_GstBaseSrc * src=0x02cbd108, unsigned __int64 offset=18446744073709551615, unsigned int length=4096, _GstBuffer * * buf=0x03f6fb64) Line 1828 + 0x9 bytes C libgstbase-0.10-0.dll!gst_base_src_loop(_GstPad * pad=0x0367c010) Line 2100 + 0x19 bytes C libgstreamer-0.10-0.dll!gst_task_func(_GstTask * task=0x0368d180, _GstTaskClass * tclass=0x01be86c0) Line 192 + 0x11 bytes C libglib-2.0-0.dll!g_thread_pool_thread_proxy(void * data=0x01be8788) Line 266 + 0x14 bytes C libglib-2.0-0.dll!g_thread_create_proxy(void * data=0x02cc7310) Line 643 + 0x10 bytes C libgthread-2.0-0.dll!g_thread_proxy(void * data=0x036899f8) Line 478 + 0x10 bytes C
Fixed in HEAD thanks to Wim: 2008-06-06 Wim Taymans <wim.taymans@collabora.co.uk> * gst/rtpmanager/gstrtpbin.c: (gst_rtp_bin_init), (gst_rtp_bin_finalize), (gst_rtp_bin_change_state): Fix deadlock when shutting down, use a new lock instead to properly shutdown.