Re: Deadlock in Gst::init()



On Thu, May 10, 2012 at 11:03:41PM -0400, José Alburquerque wrote:
> I can't reproduce this on an ubuntu 12.04 system using the same
> versions of GStreamer and gstreamermm.  'make check' of the
> gstreamermm-0.10.10.1 tarball succeeds (building and running the tests
> which all call Gst::init()).  Also, the hello_world example works just
> fine.  Here's some output:

Hi José.

The reason you cannot reproduce it on Linux is because the default mutex type is different.
It is set to PTHREAD_MUTEX_NORMAL while on OpenBSD we set it to PTHREAD_MUTEX_STRICT_NP (which allows us to catch issues like this one).
As far as I understand, self-deadlock checks are stronger with STRICT_NP than NORMAL so the issue goes unnoticed in the last case...

> [06:56][jose@jose-desktop: ~/Desktop]$ pkg-config --modversion gstreamer-0.10 
> 0.10.36
> 
> [07:21][jose@jose-desktop: /usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1]$ make check
> Making check in tools
> make[1]: Entering directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/tools'
> make[1]: Nothing to be done for `check'.
> make[1]: Leaving directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/tools'
> Making check in gstreamer/gstreamermm
> make[1]: Entering directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/gstreamer/gstreamermm'
> make[1]: Nothing to be done for `check'.
> make[1]: Leaving directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/gstreamer/gstreamermm'
> Making check in tests
> make[1]: Entering directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/tests'
> make  test-caps test-create-element test-pipeline-add-element
> test-link-elements test-create-bin test-miniobject-wrap
> test-message-wrap test-event-wrap test-query-wrap test-structure
> test-caps-structures test-interface test-create-bus test-taglist
> test-tagsetter test-pad test-ghost-pad test-init-check test-init
> test-init-check-noargs test-init-noargs test-iterator test-property-caps
> test-plugin-gen test-plugin-signals test-buffer-list-iterator
> test-base-src
> make[2]: Entering directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/tests'
> g++ -DHAVE_CONFIG_H   -I.. -I../gstreamer  -pthread
> -I/usr/include/giomm-2.4 -I/usr/lib/x86_64-linux-gnu/giomm-2.4/include
> -I/usr/include/glibmm-2.4 -I/usr/lib/x86_64-linux-gnu/glibmm-2.4/include
> -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
> -I/usr/include/sigc++-2.0 -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include
> -I/usr/include/libxml2 -I/usr/include/gstreamer-0.10
> -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include    -Wall -g
> -O2 -MT test-caps.o -MD -MP -MF .deps/test-caps.Tpo -c -o test-caps.o
> test-caps.cc
> mv -f .deps/test-caps.Tpo .deps/test-caps.Po
> ...
> make[2]: Leaving directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/tests'
> 
> make  check-TESTS
> make[2]: Entering directory
> `/usr/src/jhbuild-sources/gstreamermm/gstreamermm-0.10.10.1/tests'
> Simple caps width after setting = 500.
> Simple caps rate after setting = 25/1.
> Simple caps string after setting = 'A string'.
> Succeeded linking e1 and e2 with filter.
> PASS: test-caps
> Successfully created gst element 'source'.
> PASS: test-create-element
> Successfully added element 'source' to pipeline 'my-pipeline'.
> PASS: test-pipeline-add-element
> Successfully linked elements 'source', 'filter' and 'sink'.
> PASS: test-link-elements
> Successfully added elements 'source' and 'sink' to bin 'gtkmm__gstbin0'.
> 'gtkmm__gstbin0' children count  = 2.
> 'gtkmm__gstbin0' first child is 'sink'.
> PASS: test-create-bin
> C++ message instance is !null: 1
> PASS: test-miniobject-wrap
> C++ message instance is !null: 1
> message is a Gst::MessageWarning: 1
> message type name: 'warning'
> Message structure name: 'GstMessageWarning'
> PASS: test-message-wrap
> C++ event instance is !null: 1
> event is a Gst::EventLatency: 1
> event type name: 'latency'
> Event structure name: 'GstEventLatency'
> PASS: test-event-wrap
> C++ query instance is !null: 1
> query is a Gst::QueryPosition: 1
> query type name: 'position'
> Query structure name: 'GstQueryPosition'
> PASS: test-query-wrap
> string value after getting = 'Hello; This is a ustring'.
> integer value after getting = 100.
> fraction value after getting = 1/2.
> fractional range value after getting = [(1/2), (3/4)].
> date value after getting = 5/10/2012.
> state value after getting = Gst::STATE_PAUSED.
> PASS: test-structure
> Structure 1: Message 1
> Structure 2: Message 2
> Structure 3: Message 3
> Removing cap's structure at index 0
> Cap's structure at index 0 = Structure 2
> Stealing cap's structure at index 0
> Cap's stolen structure at indext 0 = Structure 2
> Cap's structure at index 0 = Structure 3
> PASS: test-caps-structures
> Successfully created gst element 'source'.
> element 'source' implements URIHandler interface.
> source uri = 'file:///tmp/media.file'.
> PASS: test-interface
> Successfully created gst bus.
> PASS: test-create-bus
> Tag title is 'My Song'.
> Tag artist is 'Artist'.
> Tag bit-rate is 192.
> Tag date is 2008-11-5.
> PASS: test-taglist
> bitrate = 192.
> title = `A Song'.
> PASS: test-tagsetter
> Successfully created pad template 'source-template'; direction = 2.
> Successfully created pad 'pad1'; direction = 2.
> Successfully created pad 'gtkmm__gstpad0'; direction = 2.
> Successfully created pad 'pad3'; direction = 2.
> Successfully created pad 'gtkmm__gstpad1'; direction = 2.
> PASS: test-pad
> Successfully created pad template 'source-template'; direction = 2.
> Successfully created pad 'gtkmm__gstpad0'; direction = 2.
> Successfully created pad 'gtkmm__gstpad1'; direction = 2.
> Successfully created pad 'gtkmm__gstghostpad0'; direction = 1.
> Successfully created pad 'gtkmm__gstghostpad1'; direction = 2.
> PASS: test-ghost-pad
> Successfully created gst element 'videosink'.
> element 'videosink' implements XOverlay interface.
> Successfully wrapped a GstAudioClock in a GSt::AudioClock.
> PASS: test-init-check
> Successfully created gst element 'videosink'.
> element 'videosink' implements XOverlay interface.
> Successfully wrapped a GstAudioClock in a GSt::AudioClock.
> PASS: test-init
> Successfully created gst element 'videosink'.
> element 'videosink' implements XOverlay interface.
> PASS: test-init-check-noargs
> Successfully created gst element 'videosink'.
> element 'videosink' implements XOverlay interface.
> PASS: test-init-noargs
> The following elements have been added to bin 'my-bin'.
> element4
> element3
> element2
> element1
> The first element iterator processed is 'element4'.
> The loop iterated 4 time(s) to print bin 'my-bin' elements.
> 
> The following are standard GStreamer query types:
> position -- Current position.
> duration -- Total duration.
> latency -- Latency.
> jitter -- Jitter.
> rate -- Configured rate 1000000 = 1.
> seeking -- Seeking capabilities and parameters.
> segment -- currently configured segment.
> convert -- Converting between formats.
> formats -- Supported formats for conversion.
> buffering -- Buffering status.
> custom -- Custom query.
> uri -- URI of the source or sink.
> 
> The following are standard GStreamer formats:
> default -- Default format for the media type.
> bytes -- Bytes.
> time -- Time.
> buffers -- Buffers.
> percent -- Percent.
> PASS: test-iterator
> `caps' property is null before setting property.
> `caps' property after setting and getting is 'image/jpeg,
> framerate=(fraction)2/1'.
> PASS: test-property-caps
> filesrc is valid.
> mmapsize = 4194304
> PASS: test-plugin-gen
> Setting to PLAYING.
> Running.
> Gst::FakeSrc's handoff signal triggered.
> The Gst::FakeSrc buffer's discont flag is set.
> Gst::FakeSrc's handoff signal triggered.
> Gst::FakeSrc's handoff signal triggered.
> Gst::FakeSrc's handoff signal triggered.
> Gst::FakeSrc's handoff signal triggered.
> End of stream.
> Returned. Stopping playback.
> PASS: test-plugin-signals
> PASS: test-buffer-list-iterator
> Capture 43691 43691 [input]
> PASS: test-base-src
> ===================
> All 27 tests passed
> ===================
> 
> > Thanks,
> > -Kurt
> > _______________________________________________
> > gtkmm-list mailing list
> > gtkmm-list gnome org
> > http://mail.gnome.org/mailman/listinfo/gtkmm-list
> 
> -- 
> José
> 
> 
> 

-- 
Antoine


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]