Merge lp:~thomas-voss/media-hub/add-tests-and-testing-infrastructure into lp:media-hub

Proposed by Thomas Voß
Status: Needs review
Proposed branch: lp:~thomas-voss/media-hub/add-tests-and-testing-infrastructure
Merge into: lp:media-hub
Prerequisite: lp:~thomas-voss/media-hub/externalize-all-dependencies
Diff against target: 9925 lines (+8557/-391)
53 files modified
CMakeLists.txt (+5/-0)
memcheck.suppressions (+4016/-0)
src/core/media/CMakeLists.txt (+4/-8)
src/core/media/gstreamer/engine.cpp (+20/-5)
src/core/media/gstreamer/meta_data_extractor.h (+47/-6)
src/core/media/gstreamer/playbin.cpp (+1/-0)
src/core/media/mpris/player.h (+80/-29)
src/core/media/player_base.h (+332/-0)
src/core/media/player_implementation.cpp (+6/-18)
src/core/media/player_implementation.h (+3/-0)
src/core/media/player_skeleton.cpp (+20/-7)
src/core/media/player_stub.cpp (+44/-53)
src/core/media/player_stub.h (+15/-3)
src/core/media/server/server.cpp (+4/-2)
src/core/media/service.cpp (+24/-2)
src/core/media/service_implementation.cpp (+5/-6)
src/core/media/service_skeleton.cpp (+32/-38)
src/core/media/service_skeleton.h (+15/-0)
src/core/media/service_stub.cpp (+53/-33)
src/core/media/service_stub.h (+18/-4)
tests/CMakeLists.txt (+36/-13)
tests/acceptance-tests/service.cpp (+116/-103)
tests/integration-tests/CMakeLists.txt (+6/-0)
tests/integration-tests/fixtures/player_skeleton.h (+139/-0)
tests/integration-tests/hybris_gl_sink_test.cpp (+199/-0)
tests/integration-tests/player_implementation_test.cpp (+296/-0)
tests/integration-tests/player_skeleton_test.cpp (+517/-0)
tests/integration-tests/service_implementation_test.cpp (+463/-0)
tests/integration-tests/service_skeleton_test.cpp (+344/-0)
tests/mock/audio_output_observer.h (+44/-0)
tests/mock/battery_observer.h (+52/-0)
tests/mock/call_monitor.h (+42/-0)
tests/mock/client_death_observer.h (+48/-0)
tests/mock/engine.h (+231/-0)
tests/mock/engine_factory.h (+47/-0)
tests/mock/keyed_player_store.h (+76/-0)
tests/mock/media_service.h (+37/-0)
tests/mock/player.h (+76/-0)
tests/mock/power_state_controller.h (+127/-0)
tests/mock/recorder_observer.h (+43/-0)
tests/mock/request_authenticator.h (+42/-0)
tests/mock/request_context_resolver.h (+47/-0)
tests/test_data.cpp.in (+1/-1)
tests/tools/a_trap_stopping_itself.h (+42/-0)
tests/tools/did_finish_successfully.h (+39/-0)
tests/tools/event_sink.h (+145/-0)
tests/tools/gdb_barrier.h (+52/-0)
tests/tools/gles_egl_helper.h (+187/-0)
tests/unit-tests/CMakeLists.txt (+4/-46)
tests/unit-tests/existing_request_authenticator_test.cpp (+126/-0)
tests/unit-tests/hashed_keyed_player_store_test.cpp (+97/-0)
tests/unit-tests/pulseaudio_audio_output_observer_test.cpp (+76/-0)
tests/unit-tests/test-gstreamer-engine.cpp (+16/-14)
To merge this branch: bzr merge lp:~thomas-voss/media-hub/add-tests-and-testing-infrastructure
Reviewer Review Type Date Requested Status
Jim Hodapp (community) Needs Information
PS Jenkins bot continuous-integration Approve
Review via email: mp+252104@code.launchpad.net

Commit message

Enable integration and unit tests harnessing the most important functionality of media hub.
Introduce mocks and test tooling to help test authors.

Description of the change

Enable integration and unit tests harnessing the most important functionality of media hub.
Introduce mocks and test tooling to help test authors.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
121. By Thomas Voß

[ Jim Hodapp ]
* Fix the bug which caused music playback to start playing again after
  a phonecall hung up after being auto-paused by disconnecting a
  headphone jack.
[ Thomas Voss ]
[ CI Train Bot ]
* New rebuild forced.
[ Jim Hodapp ]
* Disconnect playback_status_changed_signal in ~Private() to avoid a
  deadlock.
* Prevent a 0 position from being reported to the app which happens
  while seeking. Covers bad behavior that happens from GStreamer. Also
  expose the about_to_finish signal to the client. Enable playback
  again after manually seeking all the way to EOS. Also only send
  VideoDimensionsChanged signal only when necessary.
[ Ricardo Mendoza ]
* Add an interface apparmor::ubuntu::RequestAuthenticator that is used
  to authenticate incoming open uri requests. Add an interface
  apparmor::ubuntu::RequestContextResolver that is used to resolve a
  dbus name to an apparmor::ubuntu::Context. Provide an implementation
  apparmor::ubuntu::ExistingAuthenticator that takes the impl. from
  player_skeleton.cpp and uses it to implement the interface. Provide
  an implementation apparmor::ubuntu::RequestContextResolver that
  reaches out to the dbus daemon to resolve a given bus name to an
  apparmor profile. Remove obsolete query for the apparmor profile in
  ServiceSkeleton. Adjust the implementation in media::PlayerSkeleton
  to rely on Request{Authenticator, ContextResolver}. removed:
  src/core/media/apparmor.h added: src/core/media/apparmor/
  src/core/media/apparmor/context.cpp
  src/core/media/apparmor/context.h src/core/media/apparmor/dbus.h
  src/core/media/apparmor/ubuntu.cpp src/core/media/apparmor/ubuntu.h
* Introduce an interface media::audio::OutputObserver that allows the
  core classes to observer the state of external audio outputs
  (headphones/headsets). Provide an implementation of
  media::audio::OutputObserver that relies on Pulseaudio to monitor
  the availability of ports on the default sink. Adjust
  media::ServiceImplementation to use media::audio::OutputObserver,
  defaulting to media::audio::PulseAudioOutputObserver.
* Migrate all Player DBus methods to use transact_method() instead of
  invoke_method_synchronously(), to prevent bus executor deadlocks.
[ Ricardo Salveti de Araujo ]
* Add an interface apparmor::ubuntu::RequestAuthenticator that is used
  to authenticate incoming open uri requests. Add an interface
  apparmor::ubuntu::RequestContextResolver that is used to resolve a
  dbus name to an apparmor::ubuntu::Context. Provide an implementation
  apparmor::ubuntu::ExistingAuthenticator that takes the impl. from
  player_skeleton.cpp and uses it to implement the interface. Provide
  an implementation apparmor::ubuntu::RequestContextResolver that
  reaches out to the dbus daemon to resolve a given bus name to an
  apparmor profile. Remove obsolete query for the apparmor profile in
  ServiceSkeleton. Adjust the implementation in media::PlayerSkeleton
  to rely on Request{Authenticator, ContextResolver}. removed:
  src/core/media/apparmor.h added: src/core/media/apparmor/
  src/core/media/apparmor/context.cpp
  src/core/media/apparmor/context.h src/core/media/apparmor/dbus.h
  src/core/media/apparmor/ubuntu.cpp src/core/media/apparmor/ubuntu.h
* Move src/core/media/call-monitor to src/core/media/telephony.
  Introduce a proper interface media::telephony::CallMonitor. Slightly
  adjust existing implementation based on Qt. Adjust
  media::ServiceImplementation to account for changes in
  media::telephony::CallMonitor.
[ thomas-voss ]
* Add an interface apparmor::ubuntu::RequestAuthenticator that is used
  to authenticate incoming open uri requests. Add an interface
  apparmor::ubuntu::RequestContextResolver that is used to resolve a
  dbus name to an apparmor::ubuntu::Context. Provide an implementation
  apparmor::ubuntu::ExistingAuthenticator that takes the impl. from
  player_skeleton.cpp and uses it to implement the interface. Provide
  an implementation apparmor::ubuntu::RequestContextResolver that
  reaches out to the dbus daemon to resolve a given bus name to an
  apparmor profile. Remove obsolete query for the apparmor profile in
  ServiceSkeleton. Adjust the implementation in media::PlayerSkeleton
  to rely on Request{Authenticator, ContextResolver}. removed:
  src/core/media/apparmor.h added: src/core/media/apparmor/
  src/core/media/apparmor/context.cpp
  src/core/media/apparmor/context.h src/core/media/apparmor/dbus.h
  src/core/media/apparmor/ubuntu.cpp src/core/media/apparmor/ubuntu.h
* Add an interface media::ClientDeathObserver that abstracts away
  receiving key-based death notifications for clients associated to
  media::Player instances server-side Provide an implementation
  media::HybrisClientDeathObserver that relies on hybris and
  ultimately on Android's onBinderDied to receive death notifications.
  Adjust media::PlayerStub and media::PlayerImplementation to account
  for the new interface. Adjust the CMake setup for tests to link
  media-hub-service instead of recompiling large parts of the
  implementation classes.
* Decouple PlayerSkeleton and PlayerImplementation by making
  PlayerImplementation being able to inherit from arbitrary base
  classes, as long as they provide the set of properties and signals
  defined by media::Player.
* Decouple the ServiceSkeleton from the ServiceImplementation by
  introducing a common interface media::KeyedPlayerStore for storing
  running Player sessions indexed by the Player::Key. Provide a
  default implementation HashedKeyedPlayerStore relying on a hash map
  for keeping track of player instances. Adjust implementation to
  account for ServiceImplementation no longer inheriting from
  ServiceSkeleton.
* Introduce a common class media::helper::ExternalHelpers that
  provides a convenient way to:
* Introduce an interface media::RecorderObserver that allows the core
  classes to monitor the overall state of the system. Provide an
  implementation of media::RecorderObserver relying on Hybris to
  interface with the Android side. Adjust the ServiceImplementation to
  connect to the platform-default media::RecorderObserver.
* Introduce an interface media::audio::OutputObserver that allows the
  core classes to observer the state of external audio outputs
  (headphones/headsets). Provide an implementation of
  media::audio::OutputObserver that relies on Pulseaudio to monitor
  the availability of ports on the default sink. Adjust
  media::ServiceImplementation to use media::audio::OutputObserver,
  defaulting to media::audio::PulseAudioOutputObserver.
* Introduce an interface media::power::BatteryObserver to monitor the
  current battery level of the system. The core reacts to low/very low
  battery levels by pausing all multimedia playback sessions and
  resumes them whenever the user has been notified of the critical
  battery level. Provide an implementation of
  media::power::BatteryObserver using
  com.canonical.indicator.power.Battery. Adjust
  media::ServiceImplementation to use media::power::BatteryObserver.
* Move gstreamer::Playbin implementation to its own cpp file, thus
  internalizing the Hybris setup portions. Make sure that media-hub-
  service knows about
  media::Player::Error::OutOfProcessBufferStreamingNotSupported by
  linking with media-hub-client.
* Move src/core/media/call-monitor to src/core/media/telephony.
  Introduce a proper interface media::telephony::CallMonitor. Slightly
  adjust existing implementation based on Qt. Adjust
  media::ServiceImplementation to account for changes in
  media::telephony::CallMonitor.
* Replace home-grown mask type for the video size with a std::tuple,
  i.e., media::video::Dimensions. Introduce a simple TaggedInteger
  class to distinguish between Width, Height and other dimensions.
  Adjust interfaces of media::Player to rely on the new type. Adjust
  implementation classes to account for interface changes. Adjust
  Codec implementation for sending the tagged integer via the bus.
  Adjust gstreamer::Engine and gstreamer::Playbin to hand out the
  correct types.
* debian/control:
  - Removing pre-depends that are not required
  - Bumping standards-version to 3.9.6
[ Ricardo Salveti de Araujo ]
* Migrating tests to use ogg instead of mp3/avi removed:
  tests/h264.avi tests/test.mp3 added: tests/test-audio-1.ogg
  tests/test-video.ogg tests/test.mp3 renamed: tests/test.ogg =>
  tests/test-audio.ogg

122. By Thomas Voß

Adjust to latest changes in lp:media-hub.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
123. By Thomas Voß

Add memcheck.suppressions for handling spurious reports from glib/gobject/gstreamer (needs more investigation).
Properly scope gstreamer init/deinit to avoid static initialization fiascos.
Ensure that the bus used by the MetaDataExtractor is properly released, together with the overall pipeline.
Ensure that state changes in the MetaDataExtractor are atomic (TODO: split out common wait_for_state_change code).
Make sure that only the engine is kept alive when resetting on client death. Otherwise, objects are leaked, causing issues in integration tests.
Make sure that multimedia sessions are properly resumed when a critical battery notification ends.
Fix the mocked KeyedPlayerStore such that do_has_player_for_key never throws.
Fix meta data in test files to make GStreamerEngine.* tests pass again.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
124. By Thomas Voß

Pull in the correct libraries for linking.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Jim Hodapp (jhodapp) wrote :

Which branch or branches have your tests that you refactored and want to land? I'll have more comments for this MR after you sync your branches with trunk.

review: Needs Information

Unmerged revisions

124. By Thomas Voß

Pull in the correct libraries for linking.

123. By Thomas Voß

Add memcheck.suppressions for handling spurious reports from glib/gobject/gstreamer (needs more investigation).
Properly scope gstreamer init/deinit to avoid static initialization fiascos.
Ensure that the bus used by the MetaDataExtractor is properly released, together with the overall pipeline.
Ensure that state changes in the MetaDataExtractor are atomic (TODO: split out common wait_for_state_change code).
Make sure that only the engine is kept alive when resetting on client death. Otherwise, objects are leaked, causing issues in integration tests.
Make sure that multimedia sessions are properly resumed when a critical battery notification ends.
Fix the mocked KeyedPlayerStore such that do_has_player_for_key never throws.
Fix meta data in test files to make GStreamerEngine.* tests pass again.

122. By Thomas Voß

Adjust to latest changes in lp:media-hub.

121. By Thomas Voß

[ Jim Hodapp ]
* Fix the bug which caused music playback to start playing again after
  a phonecall hung up after being auto-paused by disconnecting a
  headphone jack.
[ Thomas Voss ]
[ CI Train Bot ]
* New rebuild forced.
[ Jim Hodapp ]
* Disconnect playback_status_changed_signal in ~Private() to avoid a
  deadlock.
* Prevent a 0 position from being reported to the app which happens
  while seeking. Covers bad behavior that happens from GStreamer. Also
  expose the about_to_finish signal to the client. Enable playback
  again after manually seeking all the way to EOS. Also only send
  VideoDimensionsChanged signal only when necessary.
[ Ricardo Mendoza ]
* Add an interface apparmor::ubuntu::RequestAuthenticator that is used
  to authenticate incoming open uri requests. Add an interface
  apparmor::ubuntu::RequestContextResolver that is used to resolve a
  dbus name to an apparmor::ubuntu::Context. Provide an implementation
  apparmor::ubuntu::ExistingAuthenticator that takes the impl. from
  player_skeleton.cpp and uses it to implement the interface. Provide
  an implementation apparmor::ubuntu::RequestContextResolver that
  reaches out to the dbus daemon to resolve a given bus name to an
  apparmor profile. Remove obsolete query for the apparmor profile in
  ServiceSkeleton. Adjust the implementation in media::PlayerSkeleton
  to rely on Request{Authenticator, ContextResolver}. removed:
  src/core/media/apparmor.h added: src/core/media/apparmor/
  src/core/media/apparmor/context.cpp
  src/core/media/apparmor/context.h src/core/media/apparmor/dbus.h
  src/core/media/apparmor/ubuntu.cpp src/core/media/apparmor/ubuntu.h
* Introduce an interface media::audio::OutputObserver that allows the
  core classes to observer the state of external audio outputs
  (headphones/headsets). Provide an implementation of
  media::audio::OutputObserver that relies on Pulseaudio to monitor
  the availability of ports on the default sink. Adjust
  media::ServiceImplementation to use media::audio::OutputObserver,
  defaulting to media::audio::PulseAudioOutputObserver.
* Migrate all Player DBus methods to use transact_method() instead of
  invoke_method_synchronously(), to prevent bus executor deadlocks.
[ Ricardo Salveti de Araujo ]
* Add an interface apparmor::ubuntu::RequestAuthenticator that is used
  to authenticate incoming open uri requests. Add an interface
  apparmor::ubuntu::RequestContextResolver that is used to resolve a
  dbus name to an apparmor::ubuntu::Context. Provide an implementation
  apparmor::ubuntu::ExistingAuthenticator that takes the impl. from
  player_skeleton.cpp and uses it to implement the interface. Provide
  an implementation apparmor::ubuntu::RequestContextResolver that
  reaches out to the dbus daemon to resolve a given bus name to an
  apparmor profile. Remove obsolete query for the apparmor profile in
  ServiceSkeleton. Adjust the implementation in media::PlayerSkeleton
  to rely on Request{Authenticator, ContextResolver}. removed:
  src/core/media/apparmor.h added: src/core/media/apparmor/
  src/core/media/apparmor/context.cpp
  src/core/media/apparmor/context.h src/core/media/apparmor/dbus.h
  src/core/media/apparmor/ubuntu.cpp src/core/media/apparmor/ubuntu.h
* Move src/core/media/call-monitor to src/core/media/telephony.
  Introduce a proper interface media::telephony::CallMonitor. Slightly
  adjust existing implementation based on Qt. Adjust
  media::ServiceImplementation to account for changes in
  media::telephony::CallMonitor.
[ thomas-voss ]
* Add an interface apparmor::ubuntu::RequestAuthenticator that is used
  to authenticate incoming open uri requests. Add an interface
  apparmor::ubuntu::RequestContextResolver that is used to resolve a
  dbus name to an apparmor::ubuntu::Context. Provide an implementation
  apparmor::ubuntu::ExistingAuthenticator that takes the impl. from
  player_skeleton.cpp and uses it to implement the interface. Provide
  an implementation apparmor::ubuntu::RequestContextResolver that
  reaches out to the dbus daemon to resolve a given bus name to an
  apparmor profile. Remove obsolete query for the apparmor profile in
  ServiceSkeleton. Adjust the implementation in media::PlayerSkeleton
  to rely on Request{Authenticator, ContextResolver}. removed:
  src/core/media/apparmor.h added: src/core/media/apparmor/
  src/core/media/apparmor/context.cpp
  src/core/media/apparmor/context.h src/core/media/apparmor/dbus.h
  src/core/media/apparmor/ubuntu.cpp src/core/media/apparmor/ubuntu.h
* Add an interface media::ClientDeathObserver that abstracts away
  receiving key-based death notifications for clients associated to
  media::Player instances server-side Provide an implementation
  media::HybrisClientDeathObserver that relies on hybris and
  ultimately on Android's onBinderDied to receive death notifications.
  Adjust media::PlayerStub and media::PlayerImplementation to account
  for the new interface. Adjust the CMake setup for tests to link
  media-hub-service instead of recompiling large parts of the
  implementation classes.
* Decouple PlayerSkeleton and PlayerImplementation by making
  PlayerImplementation being able to inherit from arbitrary base
  classes, as long as they provide the set of properties and signals
  defined by media::Player.
* Decouple the ServiceSkeleton from the ServiceImplementation by
  introducing a common interface media::KeyedPlayerStore for storing
  running Player sessions indexed by the Player::Key. Provide a
  default implementation HashedKeyedPlayerStore relying on a hash map
  for keeping track of player instances. Adjust implementation to
  account for ServiceImplementation no longer inheriting from
  ServiceSkeleton.
* Introduce a common class media::helper::ExternalHelpers that
  provides a convenient way to:
* Introduce an interface media::RecorderObserver that allows the core
  classes to monitor the overall state of the system. Provide an
  implementation of media::RecorderObserver relying on Hybris to
  interface with the Android side. Adjust the ServiceImplementation to
  connect to the platform-default media::RecorderObserver.
* Introduce an interface media::audio::OutputObserver that allows the
  core classes to observer the state of external audio outputs
  (headphones/headsets). Provide an implementation of
  media::audio::OutputObserver that relies on Pulseaudio to monitor
  the availability of ports on the default sink. Adjust
  media::ServiceImplementation to use media::audio::OutputObserver,
  defaulting to media::audio::PulseAudioOutputObserver.
* Introduce an interface media::power::BatteryObserver to monitor the
  current battery level of the system. The core reacts to low/very low
  battery levels by pausing all multimedia playback sessions and
  resumes them whenever the user has been notified of the critical
  battery level. Provide an implementation of
  media::power::BatteryObserver using
  com.canonical.indicator.power.Battery. Adjust
  media::ServiceImplementation to use media::power::BatteryObserver.
* Move gstreamer::Playbin implementation to its own cpp file, thus
  internalizing the Hybris setup portions. Make sure that media-hub-
  service knows about
  media::Player::Error::OutOfProcessBufferStreamingNotSupported by
  linking with media-hub-client.
* Move src/core/media/call-monitor to src/core/media/telephony.
  Introduce a proper interface media::telephony::CallMonitor. Slightly
  adjust existing implementation based on Qt. Adjust
  media::ServiceImplementation to account for changes in
  media::telephony::CallMonitor.
* Replace home-grown mask type for the video size with a std::tuple,
  i.e., media::video::Dimensions. Introduce a simple TaggedInteger
  class to distinguish between Width, Height and other dimensions.
  Adjust interfaces of media::Player to rely on the new type. Adjust
  implementation classes to account for interface changes. Adjust
  Codec implementation for sending the tagged integer via the bus.
  Adjust gstreamer::Engine and gstreamer::Playbin to hand out the
  correct types.
* debian/control:
  - Removing pre-depends that are not required
  - Bumping standards-version to 3.9.6
[ Ricardo Salveti de Araujo ]
* Migrating tests to use ogg instead of mp3/avi removed:
  tests/h264.avi tests/test.mp3 added: tests/test-audio-1.ogg
  tests/test-video.ogg tests/test.mp3 renamed: tests/test.ogg =>
  tests/test-audio.ogg

120. By Thomas Voß

Enable integration and unit tests harnessing the most important functionality of media hub.
Introduce mocks and test tooling to help test authors.

119. By Thomas Voß

First pass, not compiling.

118. By Thomas Voß

Merge prereq branch.
Externalize all the functional dependencies of Player{Skeleton, Implementation} and Service{Skeleton, Implementation} to allow
for easy mocking in test cases.
Adjust the server setup to instantiate platform-default implementations.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2015-01-23 13:00:36 +0000
3+++ CMakeLists.txt 2015-04-17 14:35:22 +0000
4@@ -29,6 +29,8 @@
5 pkg_check_modules(PROCESS_CPP process-cpp REQUIRED)
6 pkg_check_modules(GIO gio-2.0 REQUIRED)
7 pkg_check_modules(HYBRIS_MEDIA libmedia REQUIRED)
8+pkg_check_modules(GSTREAMER_1_0 REQUIRED gstreamer-1.0)
9+pkg_check_modules(PULSE_AUDIO REQUIRED libpulse)
10
11 add_definitions(-DMEDIA_HUB_HAVE_HYBRIS_MEDIA_COMPAT_LAYER)
12
13@@ -57,8 +59,11 @@
14 ${DBUS_INCLUDE_DIRS}
15 ${DBUS_CPP_INCLUDE_DIRS}
16 ${GLog_INCLUDE_DIR}
17+ ${GSTREAMER_1_0_INCLUDE_DIRS}
18+ ${HYBRIS_MEDIA_CFLAGS}
19 ${PROCESS_CPP_INCLUDE_DIRS}
20 ${PROPERTIES_CPP_INCLUDE_DIRS}
21+ ${PULSE_AUDIO_INCLUDE_DIRS}
22
23 include/
24 )
25
26=== added file 'memcheck.suppressions'
27--- memcheck.suppressions 1970-01-01 00:00:00 +0000
28+++ memcheck.suppressions 2015-04-17 14:35:22 +0000
29@@ -0,0 +1,4016 @@
30+### this file contains suppressions for valgrind when running
31+### the gstreamer unit tests
32+### it might be useful for wider use as well
33+
34+### syscall suppressions
35+
36+{
37+ <clone on Wim's Debian>
38+ Memcheck:Param
39+ clone(parent_tidptr)
40+ fun:clone
41+ fun:clone
42+}
43+
44+{
45+ <clone on Wim's Debian>
46+ Memcheck:Param
47+ clone(child_tidptr)
48+ fun:clone
49+ fun:clone
50+}
51+
52+{
53+ <clone on Wim's Debian>
54+ Memcheck:Param
55+ clone(tlsinfo)
56+ fun:clone
57+ fun:clone
58+}
59+
60+### glibc suppressions
61+
62+{
63+ <conditional jump on wim's debian 2/2/06>
64+ Memcheck:Cond
65+ obj:/lib/ld-2.*.so
66+ fun:dl_open_worker
67+ obj:/lib/ld-2.*.so
68+ fun:_dl_open
69+ fun:dlopen_doit
70+ obj:/lib/ld-2.*.so
71+ fun:_dlerror_run
72+ fun:dlopen
73+ fun:g_module_open
74+ fun:gst_plugin_load_file
75+}
76+
77+{
78+ <Conditional jump>
79+ Memcheck:Cond
80+ fun:strlen
81+ fun:fillin_rpath
82+ fun:_dl_init_paths
83+ fun:dl_main
84+ fun:_dl_sysdep_start
85+ fun:_dl_start
86+ obj:/lib64/ld-2.*.so
87+ obj:*
88+ obj:*
89+}
90+
91+{
92+ <Conditional jump>
93+ Memcheck:Cond
94+ fun:_dl_relocate_object
95+ fun:dl_main
96+ fun:_dl_sysdep_start
97+ fun:_dl_start
98+}
99+
100+{
101+ <insert a suppression name here>
102+ Memcheck:Cond
103+ fun:*
104+ fun:dl_open_worker
105+ fun:_dl_catch_error
106+ fun:_dl_open
107+ fun:dlopen_doit
108+ fun:_dl_catch_error
109+ fun:_dlerror_run
110+ fun:dlopen@@GLIBC_2.2.5
111+}
112+
113+# glibc does not deallocate thread-local storage
114+
115+{
116+ <tls>
117+ Memcheck:Leak
118+ fun:calloc
119+ fun:_dl_allocate_tls
120+ fun:pthread_create@@*
121+}
122+
123+{
124+ <tls>
125+ Memcheck:Leak
126+ fun:calloc
127+ fun:allocate_dtv
128+ fun:_dl_allocate_tls
129+}
130+
131+# I get an extra stack entry on x86/dapper
132+{
133+ <tls>
134+ Memcheck:Leak
135+ fun:calloc
136+ obj:/lib/ld-2.3.*.so
137+ fun:_dl_allocate_tls
138+ fun:pthread_create@@*
139+}
140+
141+
142+{
143+ <pthread strstr>
144+ Memcheck:Cond
145+ fun:strstr
146+ fun:__pthread_initialize_minimal
147+ obj:/lib/libpthread-*.so
148+ obj:/lib/libpthread-*.so
149+ fun:call_init
150+ fun:_dl_init
151+ obj:/lib/ld-*.so
152+}
153+
154+# a thread-related free problem in glibc from Edgard
155+{
156+ __libc_freeres_rw_acess
157+ Memcheck:Addr4
158+ obj:*
159+ obj:*
160+ obj:*
161+ obj:*
162+ obj:*
163+ fun:__libc_freeres
164+}
165+
166+{
167+ <a conditional jump on wim's debian>
168+ Memcheck:Cond
169+ obj:/lib/ld-2.3.*.so
170+ obj:/lib/ld-2.3.*.so
171+ obj:/lib/ld-2.3.*.so
172+ obj:/lib/ld-2.3.*.so
173+ obj:/lib/ld-2.3.*.so
174+}
175+
176+# g_module_open-related problems
177+{
178+ <started showing up on fc4-quick>
179+ Memcheck:Addr2
180+ fun:memcpy
181+ fun:_dl_map_object_deps
182+ fun:dl_open_worker
183+ fun:_dl_catch_error
184+ fun:_dl_open
185+ fun:dlopen_doit
186+ fun:_dl_catch_error
187+ fun:_dlerror_run
188+ fun:dlopen@@GLIBC_2.1
189+ fun:g_module_open
190+ fun:gst_plugin_load_file
191+ fun:gst_registry_scan_path_level
192+ fun:gst_registry_scan_path_level
193+ fun:gst_registry_scan_path_level
194+ fun:init_post
195+ fun:g_option_context_parse
196+ fun:gst_init_check
197+ fun:gst_init
198+ fun:gst_check_init
199+ fun:main
200+}
201+
202+{
203+ <started showing up on fc4-quick>
204+ Memcheck:Addr4
205+ fun:memcpy
206+ fun:_dl_map_object_deps
207+ fun:dl_open_worker
208+ fun:_dl_catch_error
209+ fun:_dl_open
210+ fun:dlopen_doit
211+ fun:_dl_catch_error
212+ fun:_dlerror_run
213+ fun:dlopen@@GLIBC_2.1
214+ fun:g_module_open
215+ fun:gst_plugin_load_file
216+ fun:gst_registry_scan_path_level
217+ fun:gst_registry_scan_path_level
218+ fun:gst_registry_scan_path_level
219+ fun:init_post
220+ fun:g_option_context_parse
221+ fun:gst_init_check
222+ fun:gst_init
223+ fun:gst_check_init
224+ fun:main
225+}
226+
227+{
228+ <g_module_open on wim's debian>
229+ Memcheck:Cond
230+ obj:/lib/ld-2.3.*.so
231+ obj:/lib/ld-2.3.*.so
232+ obj:/lib/ld-2.3.*.so
233+ fun:do_sym
234+ fun:_dl_sym
235+ fun:dlsym_doit
236+ obj:/lib/ld-2.3.*.so
237+ fun:_dlerror_run
238+ fun:dlsym
239+ fun:g_module_symbol
240+ fun:g_module_open
241+ fun:gst_plugin_load_file
242+}
243+
244+{
245+ <g_module_open on wim's debian>
246+ Memcheck:Cond
247+ obj:/lib/ld-2.3.*.so
248+ obj:/lib/ld-2.3.*.so
249+ obj:/lib/ld-2.3.*.so
250+ fun:dl_open_worker
251+ obj:/lib/ld-2.3.*.so
252+ fun:_dl_open
253+ fun:dlopen_doit
254+ obj:/lib/ld-2.3.*.so
255+ fun:_dlerror_run
256+ fun:dlopen@@GLIBC_2.1
257+ fun:g_module_open
258+ fun:gst_plugin_load_file
259+}
260+{
261+ <g_module_open on wim's debian>
262+ Memcheck:Cond
263+ obj:/lib/ld-2.3.*.so
264+ fun:dl_open_worker
265+ obj:/lib/ld-2.3.*.so
266+ fun:_dl_open
267+ fun:dlopen_doit
268+ obj:/lib/ld-2.3.*.so
269+ fun:_dlerror_run
270+ fun:dlopen@@GLIBC_2.1
271+ fun:g_module_open
272+ fun:gst_plugin_load_file
273+ fun:gst_plugin_load_by_name
274+ fun:gst_plugin_feature_load
275+}
276+
277+{
278+ <leak on wim's debian in g_module_open>
279+ Memcheck:Leak
280+ fun:malloc
281+ obj:/lib/ld-2.3.*.so
282+ fun:dl_open_worker
283+ obj:/lib/ld-2.3.*.so
284+ fun:_dl_open
285+ fun:dlopen_doit
286+ obj:/lib/ld-2.3.*.so
287+ fun:_dlerror_run
288+ fun:dlopen@@GLIBC_2.1
289+ fun:g_module_open
290+ fun:gst_plugin_load_file
291+ fun:gst_plugin_load_by_name
292+}
293+
294+{
295+ <invalid read on wim's debian>
296+ Memcheck:Addr4
297+ obj:/lib/ld-2.3.*.so
298+ obj:/lib/ld-2.3.*.so
299+ obj:/lib/ld-2.3.*.so
300+ obj:/lib/ld-2.3.*.so
301+ obj:/lib/ld-2.3.*.so
302+ obj:/lib/ld-2.3.*.so
303+ obj:/lib/ld-2.3.*.so
304+ fun:dl_open_worker
305+ obj:/lib/ld-2.3.*.so
306+ fun:_dl_open
307+ fun:dlopen_doit
308+ obj:/lib/ld-2.3.*.so
309+}
310+
311+{
312+ <invalid read on wim's debian>
313+ Memcheck:Addr4
314+ obj:/lib/ld-2.3.*.so
315+ obj:/lib/ld-2.3.*.so
316+ obj:/lib/ld-2.3.*.so
317+ obj:/lib/ld-2.3.*.so
318+ obj:/lib/ld-2.3.*.so
319+ obj:/lib/ld-2.3.*.so
320+ fun:dl_open_worker
321+ obj:/lib/ld-2.3.*.so
322+ fun:_dl_open
323+ fun:dlopen_doit
324+ obj:/lib/ld-2.3.*.so
325+ fun:_dlerror_run
326+}
327+
328+{
329+ <invalid read on wim's debian - 2006-02-02>
330+ Memcheck:Addr4
331+ obj:/lib/ld-2.3.*.so
332+ obj:/lib/ld-2.3.*.so
333+ obj:/lib/ld-2.3.*.so
334+ fun:dl_open_worker
335+ obj:/lib/ld-2.3.*.so
336+ fun:_dl_open
337+ fun:dlopen_doit
338+ obj:/lib/ld-2.3.*.so
339+ fun:_dlerror_run
340+ fun:dlopen@@GLIBC_2.1
341+ fun:g_module_open
342+}
343+
344+{
345+ <invalid read on wim's debian - 2006-02-02>
346+ Memcheck:Addr4
347+ obj:/lib/ld-2.3.*.so
348+ obj:/lib/ld-2.3.*.so
349+ fun:dl_open_worker
350+ obj:/lib/ld-2.3.*.so
351+ fun:_dl_open
352+ fun:dlopen_doit
353+ obj:/lib/ld-2.3.*.so
354+ fun:_dlerror_run
355+ fun:dlopen@@GLIBC_2.1
356+ fun:g_module_open
357+}
358+
359+{
360+ <invalid read on wim's debian - 2006-02-02>
361+ Memcheck:Addr4
362+ obj:/lib/ld-2.3.*.so
363+ obj:/lib/ld-2.3.*.so
364+ obj:/lib/ld-2.3.*.so
365+ fun:do_sym
366+ fun:_dl_sym
367+ fun:dlsym_doit
368+ obj:/lib/ld-2.3.*.so
369+ fun:_dlerror_run
370+ fun:dlsym
371+ fun:g_module_symbol
372+ fun:g_module_open
373+}
374+
375+{
376+ <futex on Andy's 64-bit ubuntu>
377+ Memcheck:Param
378+ futex(uaddr2)
379+ fun:pthread_once
380+ obj:/lib/libc-2.3.*.so
381+ obj:/lib/libc-2.3.*.so
382+ fun:mbsnrtowcs
383+ fun:vfprintf
384+ fun:vsprintf
385+ fun:sprintf
386+ obj:/lib/libc-2.3.*.so
387+ fun:tmpfile
388+ fun:setup_pipe
389+ fun:setup_messaging_with_key
390+ fun:setup_messaging
391+}
392+
393+{
394+ <suppression for glibc 2.7 on debian>
395+ Memcheck:Addr4
396+ obj:/lib/ld-2.7.so
397+ obj:/lib/ld-2.7.so
398+ obj:/lib/ld-2.7.so
399+ obj:/lib/i686/cmov/libdl-2.7.so
400+ obj:/lib/ld-2.7.so
401+ obj:/lib/i686/cmov/libdl-2.7.so
402+ fun:dlopen
403+ fun:g_module_open
404+}
405+
406+{
407+ <suppression for glibc 2.7 on debian>
408+ Memcheck:Addr4
409+ obj:/lib/ld-2.7.so
410+ obj:/lib/ld-2.7.so
411+ obj:/lib/ld-2.7.so
412+ obj:/lib/i686/cmov/libc-2.7.so
413+ fun:_dl_sym
414+ obj:/lib/i686/cmov/libdl-2.7.so
415+ obj:/lib/ld-2.7.so
416+ obj:/lib/i686/cmov/libdl-2.7.so
417+ fun:dlsym
418+ fun:g_module_symbol
419+ fun:g_module_open
420+}
421+
422+{
423+ <suppression for glibc 2.7 on debian>
424+ Memcheck:Addr4
425+ obj:/lib/ld-2.7.so
426+ obj:/lib/ld-2.7.so
427+ obj:/lib/ld-2.7.so
428+ obj:/lib/ld-2.7.so
429+ obj:/lib/ld-2.7.so
430+ obj:/lib/ld-2.7.so
431+ obj:/lib/ld-2.7.so
432+ obj:/lib/ld-2.7.so
433+ obj:/lib/ld-2.7.so
434+ obj:/lib/i686/cmov/libdl-2.7.so
435+ obj:/lib/ld-2.7.so
436+ obj:/lib/i686/cmov/libdl-2.7.so
437+ fun:dlopen
438+ fun:g_module_open
439+}
440+
441+{
442+ <suppression for glibc 2.7 on debian>
443+ Memcheck:Addr4
444+ obj:/lib/ld-2.7.so
445+ obj:/lib/ld-2.7.so
446+ obj:/lib/ld-2.7.so
447+ obj:/lib/ld-2.7.so
448+ obj:/lib/ld-2.7.so
449+ obj:/lib/ld-2.7.so
450+ obj:/lib/i686/cmov/libdl-2.7.so
451+ obj:/lib/ld-2.7.so
452+ obj:/lib/i686/cmov/libdl-2.7.so
453+ fun:dlopen
454+ fun:g_module_open
455+}
456+
457+{
458+ <suppression for glibc 2.7 on debian>
459+ Memcheck:Addr4
460+ obj:/lib/ld-2.7.so
461+ obj:/lib/ld-2.7.so
462+ obj:/lib/ld-2.7.so
463+ obj:/lib/ld-2.7.so
464+ obj:/lib/ld-2.7.so
465+ obj:/lib/i686/cmov/libdl-2.7.so
466+ obj:/lib/ld-2.7.so
467+ obj:/lib/i686/cmov/libdl-2.7.so
468+ fun:dlopen
469+ fun:g_module_open
470+}
471+
472+{
473+ <suppression for glibc 2.7 on debian>
474+ Memcheck:Addr4
475+ obj:/lib/ld-2.7.so
476+ obj:/lib/ld-2.7.so
477+ obj:/lib/ld-2.7.so
478+ obj:/lib/ld-2.7.so
479+ obj:/lib/ld-2.7.so
480+ obj:/lib/ld-2.7.so
481+ obj:/lib/ld-2.7.so
482+ obj:/lib/ld-2.7.so
483+ obj:/lib/ld-2.7.so
484+ obj:/lib/i686/cmov/libc-2.7.so
485+ obj:/lib/ld-2.7.so
486+ fun:__libc_dlopen_mode
487+}
488+
489+{
490+ <suppression for glibc 2.7 on debian>
491+ Memcheck:Addr4
492+ obj:/lib/ld-2.7.so
493+ obj:/lib/ld-2.7.so
494+ obj:/lib/ld-2.7.so
495+ obj:/lib/ld-2.7.so
496+ obj:/lib/ld-2.7.so
497+ obj:/lib/ld-2.7.so
498+ obj:/lib/i686/cmov/libc-2.7.so
499+ obj:/lib/ld-2.7.so
500+ fun:__libc_dlopen_mode
501+}
502+
503+{
504+ <suppression for glibc 2.7 on debian>
505+ Memcheck:Addr4
506+ obj:/lib/ld-2.7.so
507+ obj:/lib/ld-2.7.so
508+ obj:/lib/ld-2.7.so
509+ obj:/lib/ld-2.7.so
510+ obj:/lib/ld-2.7.so
511+ obj:/lib/i686/cmov/libc-2.7.so
512+ obj:/lib/ld-2.7.so
513+ fun:__libc_dlopen_mode
514+ obj:/lib/i686/cmov/libc-2.7.so
515+ obj:/lib/i686/cmov/libc-2.7.so
516+ obj:/lib/i686/cmov/libc-2.7.so
517+ obj:/lib/i686/cmov/libc-2.7.so
518+ obj:/lib/i686/cmov/libc-2.7.so
519+ fun:iconv_open
520+}
521+
522+{
523+ <suppression for glibc 2.7 on debian>
524+ Memcheck:Addr4
525+ obj:/lib/ld-2.7.so
526+ obj:/lib/ld-2.7.so
527+ obj:/lib/ld-2.7.so
528+ obj:/lib/i686/cmov/libc-2.7.so
529+ obj:/lib/ld-2.7.so
530+ fun:__libc_dlopen_mode
531+ obj:/lib/i686/cmov/libc-2.7.so
532+ obj:/lib/i686/cmov/libc-2.7.so
533+ obj:/lib/i686/cmov/libc-2.7.so
534+ obj:/lib/i686/cmov/libc-2.7.so
535+ obj:/lib/i686/cmov/libc-2.7.so
536+ fun:iconv_open
537+}
538+
539+{
540+ <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
541+ Memcheck:Addr8
542+ obj:/lib/ld-2.7.so
543+ obj:/lib/ld-2.7.so
544+ obj:/lib/ld-2.7.so
545+ obj:/lib/ld-2.7.so
546+ obj:/lib/libc-2.7.so
547+ obj:/lib/ld-2.7.so
548+ fun:__libc_dlopen_mode
549+ obj:/lib/libc-2.7.so
550+ obj:/lib/libc-2.7.so
551+ obj:/lib/libc-2.7.so
552+ obj:/lib/libc-2.7.so
553+ obj:/lib/libc-2.7.so
554+ fun:iconv_open
555+}
556+
557+{
558+ <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
559+ Memcheck:Addr8
560+ obj:/lib/ld-2.7.so
561+ obj:/lib/ld-2.7.so
562+ obj:/lib/ld-2.7.so
563+ obj:/lib/ld-2.7.so
564+ obj:/lib/ld-2.7.so
565+ obj:/lib/ld-2.7.so
566+ obj:/lib/libc-2.7.so
567+ obj:/lib/ld-2.7.so
568+ fun:__libc_dlopen_mode
569+ obj:/lib/libc-2.7.so
570+ obj:/lib/libc-2.7.so
571+ obj:/lib/libc-2.7.so
572+ obj:/lib/libc-2.7.so
573+ obj:/lib/libc-2.7.so
574+ fun:iconv_open
575+}
576+
577+{
578+ <suppression for glibc 2.7 on debian>
579+ Memcheck:Addr4
580+ obj:/lib/ld-2.7.so
581+ obj:/lib/ld-2.7.so
582+ obj:/lib/ld-2.7.so
583+ obj:/lib/ld-2.7.so
584+ obj:/lib/ld-2.7.so
585+ obj:/lib/i686/cmov/libdl-2.7.so
586+ obj:/lib/ld-2.7.so
587+ obj:/lib/i686/cmov/libdl-2.7.so
588+ fun:dlopen
589+}
590+
591+{
592+ <suppression for glibc 2.7 on debian>
593+ Memcheck:Addr4
594+ obj:/lib/ld-2.7.so
595+ obj:/lib/i686/cmov/libdl-2.7.so
596+ obj:/lib/ld-2.7.so
597+ obj:/lib/i686/cmov/libdl-2.7.so
598+ fun:dlopen
599+}
600+
601+{
602+ <suppression for glibc 2.7 on Ubunty Hardy 64-bit>
603+ Memcheck:Addr8
604+ obj:/lib/ld-2.7.so
605+ obj:/lib/ld-2.7.so
606+ obj:/lib/ld-2.7.so
607+ obj:/lib/ld-2.7.so
608+ obj:/lib/ld-2.7.so
609+ obj:/lib/ld-2.7.so
610+ obj:/lib/ld-2.7.so
611+ obj:/lib/libc-2.7.so
612+ obj:/lib/ld-2.7.so
613+ fun:__libc_dlopen_mode
614+}
615+
616+{
617+ <suppression for glibc 2.7 on debian>
618+ Memcheck:Cond
619+ obj:/lib/ld-2.7.so
620+ obj:/lib/ld-2.7.so
621+ obj:/lib/i686/cmov/libdl-2.7.so
622+ obj:/lib/ld-2.7.so
623+ obj:/lib/i686/cmov/libdl-2.7.so
624+ fun:dlopen
625+}
626+
627+{
628+ <suppression for glibc 2.7 on debian>
629+ Memcheck:Cond
630+ obj:/lib/ld-2.7.so
631+ obj:/lib/ld-2.7.so
632+ obj:/lib/i686/cmov/libdl-2.7.so
633+ obj:/lib/ld-2.7.so
634+ obj:/lib/i686/cmov/libdl-2.7.so
635+ fun:dlopen
636+}
637+
638+{
639+ <suppression for glibc 2.7 on debian>
640+ Memcheck:Addr4
641+ obj:/lib/ld-2.7.so
642+ obj:/lib/ld-2.7.so
643+ obj:/lib/ld-2.7.so
644+ obj:/lib/ld-2.7.so
645+ obj:/lib/ld-2.7.so
646+ obj:/lib/i686/cmov/libdl-2.7.so
647+ obj:/lib/ld-2.7.so
648+ obj:/lib/i686/cmov/libdl-2.7.so
649+ fun:dlopen
650+}
651+
652+{
653+ <suppression for glibc 2.7 on debian>
654+ Memcheck:Addr4
655+ obj:/lib/ld-2.7.so
656+ obj:/lib/i686/cmov/libdl-2.7.so
657+ obj:/lib/ld-2.7.so
658+ obj:/lib/i686/cmov/libdl-2.7.so
659+ fun:dlopen
660+}
661+
662+{
663+ <suppression for glibc 2.7 on debian>
664+ Memcheck:Cond
665+ obj:/lib/ld-2.7.so
666+ obj:/lib/ld-2.7.so
667+ obj:/lib/i686/cmov/libdl-2.7.so
668+ obj:/lib/ld-2.7.so
669+ obj:/lib/i686/cmov/libdl-2.7.so
670+ fun:dlopen
671+}
672+
673+{
674+ <suppression for glibc 2.7 on debian>
675+ Memcheck:Cond
676+ obj:/lib/ld-2.7.so
677+ obj:/lib/ld-2.7.so
678+ obj:/lib/i686/cmov/libdl-2.7.so
679+ obj:/lib/ld-2.7.so
680+ obj:/lib/i686/cmov/libdl-2.7.so
681+ fun:dlopen
682+}
683+
684+{
685+ <suppression for glibc 2.7 on debian>
686+ Memcheck:Addr4
687+ obj:/lib/ld-2.7.so
688+ obj:/lib/ld-2.7.so
689+ obj:/lib/ld-2.7.so
690+ obj:/lib/ld-2.7.so
691+ obj:/lib/ld-2.7.so
692+ obj:/lib/i686/cmov/libdl-2.7.so
693+ obj:/lib/ld-2.7.so
694+ obj:/lib/i686/cmov/libdl-2.7.so
695+ fun:dlopen
696+}
697+
698+{
699+ <suppression for glibc 2.7 on debian>
700+ Memcheck:Addr4
701+ obj:/lib/ld-2.7.so
702+ obj:/lib/i686/cmov/libdl-2.7.so
703+ obj:/lib/ld-2.7.so
704+ obj:/lib/i686/cmov/libdl-2.7.so
705+ fun:dlopen
706+}
707+
708+{
709+ <suppression for glibc 2.7 on debian>
710+ Memcheck:Cond
711+ obj:/lib/ld-2.7.so
712+ obj:/lib/ld-2.7.so
713+ obj:/lib/i686/cmov/libdl-2.7.so
714+ obj:/lib/ld-2.7.so
715+ obj:/lib/i686/cmov/libdl-2.7.so
716+ fun:dlopen
717+}
718+
719+{
720+ <suppression for glibc 2.7 on debian>
721+ Memcheck:Cond
722+ obj:/lib/ld-2.7.so
723+ obj:/lib/ld-2.7.so
724+ obj:/lib/i686/cmov/libdl-2.7.so
725+ obj:/lib/ld-2.7.so
726+ obj:/lib/i686/cmov/libdl-2.7.so
727+ fun:dlopen
728+}
729+
730+{
731+ <suppression for glibc 2.7 on debian>
732+ Memcheck:Addr4
733+ obj:/lib/ld-2.7.so
734+ obj:/lib/ld-2.7.so
735+ obj:/lib/ld-2.7.so
736+ obj:/lib/ld-2.7.so
737+ obj:/lib/ld-2.7.so
738+ obj:/lib/ld-2.7.so
739+ obj:/lib/ld-2.7.so
740+ obj:/lib/ld-2.7.so
741+ obj:/lib/ld-2.7.so
742+ obj:/lib/ld-2.7.so
743+ obj:/lib/i686/cmov/libdl-2.7.so
744+ obj:/lib/ld-2.7.so
745+ obj:/lib/i686/cmov/libdl-2.7.so
746+ fun:dlopen
747+}
748+
749+# suppression for a glibc bug:
750+# http://valgrind.org/docs/manual/faq.html#faq.exit_errors>
751+{
752+ <Workaround for a glibc bug>
753+ Memcheck:Free
754+ fun:free
755+ obj:*libc-*.so
756+ fun:__libc_freeres
757+ fun:*
758+ fun:_Exit
759+}
760+
761+# same as above, just so it works for tpm on gutsy/x86-64
762+{
763+ <workaround glibc bug on gutsy x86-64>
764+ Memcheck:Free
765+ fun:free
766+ fun:free_mem
767+ fun:__libc_freeres
768+}
769+
770+# valgrind doesn't allow me to specify a suppression for Addr1, Addr2, Addr4
771+# as Addr*, so 3 copies for that; and then 2 of each for that pesky memcpy
772+{
773+ <Invalid read of size 1, 2, 4 on thomas's FC4>
774+ Memcheck:Addr1
775+ fun:_dl_signal_error
776+ fun:_dl_map_object_deps
777+ fun:dl_open_worker
778+ fun:_dl_catch_error
779+ fun:_dl_open
780+ fun:dlopen_doit
781+ fun:_dl_catch_error
782+ fun:_dlerror_run
783+ fun:dlopen@@GLIBC_2.1
784+ fun:g_module_open
785+}
786+
787+{
788+ <Invalid read of size 1, 2, 4 on thomas's FC4>
789+ Memcheck:Addr2
790+ fun:_dl_signal_error
791+ fun:_dl_map_object_deps
792+ fun:dl_open_worker
793+ fun:_dl_catch_error
794+ fun:_dl_open
795+ fun:dlopen_doit
796+ fun:_dl_catch_error
797+ fun:_dlerror_run
798+ fun:dlopen@@GLIBC_2.1
799+ fun:g_module_open
800+}
801+{
802+ <Invalid read of size 1, 2, 4 on thomas's FC4>
803+ Memcheck:Addr4
804+ fun:_dl_signal_error
805+ fun:_dl_map_object_deps
806+ fun:dl_open_worker
807+ fun:_dl_catch_error
808+ fun:_dl_open
809+ fun:dlopen_doit
810+ fun:_dl_catch_error
811+ fun:_dlerror_run
812+ fun:dlopen@@GLIBC_2.1
813+ fun:g_module_open
814+}
815+
816+{
817+ <Invalid read of size 1, 2, 4 on thomas's FC4>
818+ Memcheck:Addr1
819+ fun:memcpy
820+ fun:_dl_signal_error
821+ fun:_dl_map_object_deps
822+ fun:dl_open_worker
823+ fun:_dl_catch_error
824+ fun:_dl_open
825+ fun:dlopen_doit
826+ fun:_dl_catch_error
827+ fun:_dlerror_run
828+ fun:dlopen@@GLIBC_2.1
829+ fun:g_module_open
830+}
831+
832+{
833+ <Invalid read of size 1, 2, 4 on thomas's FC4>
834+ Memcheck:Addr2
835+ fun:memcpy
836+ fun:_dl_signal_error
837+ fun:_dl_map_object_deps
838+ fun:dl_open_worker
839+ fun:_dl_catch_error
840+ fun:_dl_open
841+ fun:dlopen_doit
842+ fun:_dl_catch_error
843+ fun:_dlerror_run
844+ fun:dlopen@@GLIBC_2.1
845+ fun:g_module_open
846+}
847+{
848+ <Invalid read of size 1, 2, 4 on thomas's FC4>
849+ Memcheck:Addr4
850+ fun:memcpy
851+ fun:_dl_signal_error
852+ fun:_dl_map_object_deps
853+ fun:dl_open_worker
854+ fun:_dl_catch_error
855+ fun:_dl_open
856+ fun:dlopen_doit
857+ fun:_dl_catch_error
858+ fun:_dlerror_run
859+ fun:dlopen@@GLIBC_2.1
860+ fun:g_module_open
861+}
862+
863+{
864+ <Addr8 on Andy's AMD64 ubuntu in dl_open>
865+ Memcheck:Addr8
866+ obj:/lib/ld-2.3.*.so
867+ obj:/lib/ld-2.3.*.so
868+ obj:/lib/ld-2.3.*.so
869+ obj:/lib/ld-2.3.*.so
870+ obj:/lib/ld-2.3.*.so
871+ obj:/lib/ld-2.3.*.so
872+ obj:/lib/ld-2.3.*.so
873+ obj:/lib/libc-2.3.*.so
874+ obj:/lib/ld-2.3.*.so
875+ fun:_dl_open
876+ obj:/lib/libdl-2.3.*.so
877+ obj:/lib/ld-2.3.*.so
878+}
879+
880+{
881+ <Conditional jump on Andy's AMD64 ubuntu>
882+ Memcheck:Cond
883+ obj:/lib/ld-2.3.*.so
884+ obj:/lib/libc-2.3.*.so
885+ obj:/lib/ld-2.3.*.so
886+ fun:_dl_open
887+ obj:/lib/libdl-2.3.*.so
888+ obj:/lib/ld-2.3.*.so
889+ obj:/lib/libdl-2.3.*.so
890+ fun:dlopen
891+ fun:g_module_open
892+ fun:gst_plugin_load_file
893+ fun:gst_plugin_load_by_name
894+ fun:gst_plugin_feature_load
895+}
896+
897+{
898+ <Mike's x86 dapper>
899+ Memcheck:Addr4
900+ obj:/lib/ld-2.3.6.so
901+ obj:/lib/ld-2.3.6.so
902+ obj:/lib/tls/i686/cmov/libc-2.3.6.so
903+ obj:/lib/ld-2.3.6.so
904+ fun:_dl_open
905+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
906+ obj:/lib/ld-2.3.6.so
907+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
908+ fun:dlopen
909+}
910+
911+{
912+ <Mike's x86 dapper>
913+ Memcheck:Cond
914+ obj:/lib/ld-2.3.6.so
915+ obj:/lib/tls/i686/cmov/libc-2.3.6.so
916+ obj:/lib/ld-2.3.6.so
917+ fun:_dl_open
918+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
919+ obj:/lib/ld-2.3.6.so
920+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
921+ fun:dlopen
922+}
923+
924+{
925+ <Another dapper one>
926+ Memcheck:Cond
927+ obj:/lib/ld-2.3.6.so
928+ obj:/lib/ld-2.3.6.so
929+ obj:/lib/ld-2.3.6.so
930+ obj:/lib/tls/i686/cmov/libc-2.3.6.so
931+ obj:/lib/ld-2.3.6.so
932+ fun:_dl_open
933+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
934+ obj:/lib/ld-2.3.6.so
935+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
936+ fun:dlopen
937+}
938+
939+### glib suppressions
940+{
941+ <g_parse_debug_string>
942+ Memcheck:Cond
943+ fun:g_parse_debug_string
944+ obj:/usr/lib*/libglib-2.0.so.*
945+ fun:g_slice_alloc
946+ fun:g_slice_alloc0
947+}
948+
949+{
950+ <g_type_init leaks>
951+ Memcheck:Leak
952+ fun:*alloc
953+ ...
954+ fun:g_type_init*
955+ fun:init_pre*
956+}
957+
958+{
959+ <g_type_register_fundamental leaks>
960+ Memcheck:Leak
961+ fun:*alloc
962+ ...
963+ fun:g_type_register_fundamental
964+}
965+
966+{
967+ <glib 2.21 static type data>
968+ Memcheck:Leak
969+ fun:malloc
970+ fun:realloc
971+ fun:g_realloc
972+ fun:type_node_any_new_W
973+}
974+
975+{
976+ <glib 2.21 static type data>
977+ Memcheck:Leak
978+ fun:realloc
979+ fun:g_realloc
980+ fun:type_node_any_new_W
981+}
982+
983+{
984+ <glib 2.21 static type data>
985+ Memcheck:Leak
986+ fun:calloc
987+ fun:g_malloc0
988+ fun:g_type_class_ref
989+}
990+
991+{
992+ <glib 2.21 static type data>
993+ Memcheck:Leak
994+ fun:malloc
995+ fun:realloc
996+ fun:g_realloc
997+ fun:type_add_flags_W
998+}
999+
1000+{
1001+ <glib 2.21 static type data>
1002+ Memcheck:Leak
1003+ fun:calloc
1004+ fun:g_malloc0
1005+ fun:type_add_flags_W
1006+}
1007+
1008+#pthread memleaks
1009+
1010+{
1011+ Thread creation leak
1012+ Memcheck:Leak
1013+ fun:calloc
1014+ fun:allocate_dtv
1015+ fun:_dl_allocate*
1016+ fun:_dl_allocate*
1017+ fun:__pthread_initialize_minimal
1018+}
1019+
1020+{
1021+ Thread management leak
1022+ Memcheck:Leak
1023+ fun:calloc
1024+ fun:allocate_dtv
1025+ fun:_dl_allocate*
1026+ fun:_dl_allocate*
1027+ fun:__pthread_*
1028+}
1029+
1030+{
1031+ Thread management leak 2
1032+ Memcheck:Leak
1033+ fun:memalign
1034+ fun:_dl_allocate*
1035+ fun:_dl_allocate*
1036+ fun:__pthread_*
1037+}
1038+
1039+{
1040+ pthread_create Syscall param write(buf) points to uninitialised byte(s)
1041+ Memcheck:Param
1042+ write(buf)
1043+ fun:pthread_create@@GLIBC_2.2.5
1044+ fun:g_thread_create*
1045+
1046+}
1047+
1048+# nss_parse_* memleak (used by g_option_context_parse)
1049+{
1050+ nss_parse_* memleak
1051+ Memcheck:Leak
1052+ fun:malloc
1053+ fun:nss_parse_service_list
1054+ fun:__nss_database_lookup
1055+}
1056+
1057+# liboil suppressions
1058+{
1059+ <liboil cpu_fault_check_try>
1060+ Memcheck:Value8
1061+ obj:/usr/lib/liboil-0.3.so.0.1.0
1062+ obj:/usr/lib/liboil-0.3.so.0.1.0
1063+ obj:/usr/lib/liboil-0.3.so.0.1.0
1064+ fun:oil_cpu_fault_check_try
1065+ fun:oil_test_check_impl
1066+ fun:oil_class_optimize
1067+ fun:oil_optimize_all
1068+ fun:oil_init
1069+}
1070+
1071+{
1072+ <annoying read error inside dlopen stuff on Ubuntu Dapper x86_64>
1073+ Memcheck:Addr8
1074+ obj:/lib/ld-2.3.6.so
1075+}
1076+
1077+{
1078+ <Ubuntu Dapper x86_64>
1079+ Memcheck:Param
1080+ futex(uaddr2)
1081+ fun:pthread_once
1082+ obj:/lib/libc-2.3.6.so
1083+ obj:/lib/libc-2.3.6.so
1084+ fun:setlocale
1085+ fun:init_pre
1086+ fun:g_option_context_parse
1087+ fun:gst_init_check
1088+ fun:gst_init
1089+ fun:gst_check_init
1090+ fun:main
1091+}
1092+
1093+{
1094+ <Ubuntu Dapper x86_64 dlopen stuff again>
1095+ Memcheck:Cond
1096+ obj:/lib/ld-2.3.6.so
1097+ obj:/lib/ld-2.3.6.so
1098+ fun:_dl_open
1099+ obj:/lib/libdl-2.3.6.so
1100+ obj:/lib/ld-2.3.6.so
1101+ obj:/lib/libdl-2.3.6.so
1102+ fun:dlopen
1103+ fun:g_module_open
1104+ fun:gst_plugin_load_file
1105+}
1106+# this exists in a bunch of different variations, hence the short tail/trace
1107+{
1108+ <dlopen invalid read of size 4 suppression on tpm's Ubuntu edgy/x86>
1109+ Memcheck:Addr4
1110+ obj:/lib/ld-2.4.so
1111+ obj:/lib/ld-2.4.so
1112+}
1113+{
1114+ <and the same for 64bit systems>
1115+ Memcheck:Addr8
1116+ obj:/lib/ld-2.4.so
1117+ obj:/lib/ld-2.4.so
1118+}
1119+
1120+# More edgy suppressions (Mike)
1121+{
1122+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
1123+ Memcheck:Cond
1124+ obj:/lib/ld-2.4.so
1125+ obj:/lib/ld-2.4.so
1126+ obj:/lib/ld-2.4.so
1127+ obj:/lib/ld-2.4.so
1128+ fun:dlopen_doit
1129+ obj:/lib/ld-2.4.so
1130+ fun:_dlerror_run
1131+ fun:dlopen@@GLIBC_2.1
1132+}
1133+
1134+{
1135+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
1136+ Memcheck:Cond
1137+ obj:/lib/ld-2.4.so
1138+ obj:/lib/ld-2.4.so
1139+ obj:/lib/ld-2.4.so
1140+ obj:/lib/ld-2.4.so
1141+ obj:/lib/ld-2.4.so
1142+ obj:/lib/ld-2.4.so
1143+ fun:dlopen_doit
1144+ obj:/lib/ld-2.4.so
1145+ fun:_dlerror_run
1146+ fun:dlopen@@GLIBC_2.1
1147+}
1148+
1149+{
1150+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
1151+ Memcheck:Cond
1152+ obj:/lib/ld-2.4.so
1153+ obj:/lib/ld-2.4.so
1154+ obj:/lib/ld-2.4.so
1155+ fun:do_sym
1156+ fun:_dl_sym
1157+}
1158+
1159+# This one's overly general, but there's zero other information in the stack
1160+# trace - just these five lines!
1161+{
1162+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
1163+ Memcheck:Cond
1164+ obj:/lib/ld-2.4.so
1165+ obj:/lib/ld-2.4.so
1166+ obj:/lib/ld-2.4.so
1167+ obj:/lib/ld-2.4.so
1168+ obj:/lib/ld-2.4.so
1169+}
1170+
1171+{
1172+ <tls leaks on Edgy/x86>
1173+ Memcheck:Leak
1174+ fun:calloc
1175+ obj:/lib/ld-2.4.so
1176+ fun:_dl_allocate_tls
1177+ fun:pthread_create@@GLIBC_2.1
1178+}
1179+
1180+# TLS leaks for feisty/x86
1181+{
1182+ <tls leaks on Feisty/x86>
1183+ Memcheck:Leak
1184+ fun:calloc
1185+ fun:allocate_dtv
1186+ fun:_dl_allocate_tls
1187+ fun:pthread_create@@GLIBC_2.1
1188+}
1189+
1190+{
1191+ <libcdio 0.76 leak>
1192+ Memcheck:Leak
1193+ fun:calloc
1194+ obj:/usr/lib/libcdio.so.6.0.1
1195+ fun:cdio_open_am_linux
1196+ obj:/usr/lib/libcdio.so.6.0.1
1197+ fun:cdio_open_am
1198+}
1199+
1200+{
1201+ <Addr8 on Jan's AMD64 ubuntu Feisty in dl_open>
1202+ Memcheck:Addr8
1203+ obj:/lib/ld-2.5.so
1204+}
1205+
1206+{
1207+ <First of many Alsa errors>
1208+ Memcheck:Cond
1209+ fun:snd_pcm_direct_shm_create_or_connect
1210+ fun:snd_pcm_dsnoop_open
1211+ fun:_snd_pcm_dsnoop_open
1212+ obj:/*lib/libasound.so.2.0.0
1213+ obj:/*lib/libasound.so.2.0.0
1214+ fun:snd_pcm_open_slave
1215+ fun:_snd_pcm_plug_open
1216+ obj:/*lib/libasound.so.2.0.0
1217+ fun:snd_pcm_open_slave
1218+ fun:_snd_pcm_asym_open
1219+ obj:/*lib/libasound.so.2.0.0
1220+ obj:/*lib/libasound.so.2.0.0
1221+}
1222+
1223+{
1224+ <alsa error>
1225+ Memcheck:Cond
1226+ fun:snd*_pcm_hw_param_set_near
1227+}
1228+
1229+{
1230+ <alsa error>
1231+ Memcheck:Cond
1232+ ...
1233+ fun:snd*_pcm_hw_param_set_near
1234+}
1235+
1236+{
1237+ <alsa error>
1238+ Memcheck:Cond
1239+ obj:/*lib/libasound.so.2.0.0
1240+ obj:/*lib/libasound.so.2.0.0
1241+ fun:snd_pcm_close
1242+ obj:/*lib/libasound.so.2.0.0
1243+}
1244+{
1245+ <alsa error>
1246+ Memcheck:Cond
1247+ fun:snd_pcm_direct_shm_create_or_connect
1248+ fun:snd_pcm_dmix_open
1249+ fun:_snd_pcm_dmix_open
1250+ obj:/*lib/libasound.so.2.0.0
1251+ obj:/*lib/libasound.so.2.0.0
1252+ fun:snd_pcm_open_slave
1253+ fun:_snd_pcm_softvol_open
1254+ obj:/*lib/libasound.so.2.0.0
1255+ fun:snd_pcm_open_slave
1256+ fun:_snd_pcm_plug_open
1257+ obj:/*lib/libasound.so.2.0.0
1258+ fun:snd_pcm_open_slave
1259+ fun:_snd_pcm_asym_open
1260+ obj:/*lib/libasound.so.2.0.0
1261+ obj:/*lib/libasound.so.2.0.0
1262+}
1263+{
1264+ <alsa error>
1265+ Memcheck:Leak
1266+ fun:malloc
1267+ fun:strdup
1268+ fun:snd_dlobj_cache_add
1269+ obj:/*lib/libasound.so.2.0.0
1270+ fun:snd_pcm_open_slave
1271+ fun:snd_pcm_dsnoop_open
1272+ fun:_snd_pcm_dsnoop_open
1273+ obj:/*lib/libasound.so.2.0.0
1274+ obj:/*lib/libasound.so.2.0.0
1275+ fun:snd_pcm_open_slave
1276+ fun:_snd_pcm_plug_open
1277+ obj:/*lib/libasound.so.2.0.0
1278+ fun:snd_pcm_open_slave
1279+ fun:_snd_pcm_asym_open
1280+ obj:/*lib/libasound.so.2.0.0
1281+ obj:/*lib/libasound.so.2.0.0
1282+}
1283+# Catch about 15 variations on inserting info into an ALSA
1284+# internal cache
1285+{
1286+ <alsa error>
1287+ Memcheck:Leak
1288+ fun:malloc
1289+ ...
1290+ fun:snd*_dlobj_cache_add
1291+ obj:/*lib*/libasound.so.2.0.0
1292+}
1293+
1294+{
1295+ <alsa leak in loading configuration>
1296+ Memcheck:Leak
1297+ fun:*alloc
1298+ ...
1299+ fun:snd_pcm_open_conf
1300+}
1301+
1302+{
1303+ <alsa leak snd_config_hook_load>
1304+ Memcheck:Leak
1305+ fun:*alloc
1306+ obj:/*lib*/libasound.so.2.0.0
1307+ ...
1308+ fun:snd_config_hook_load
1309+}
1310+
1311+{
1312+ <alsa leak snd_config_update_r>
1313+ Memcheck:Leak
1314+ fun:*alloc
1315+ obj:/*lib*/libasound.so.2.0.0
1316+ ...
1317+ fun:snd_config_update_r
1318+ fun:snd_config_update
1319+}
1320+{
1321+ <alsa leak snd_config_update_r>
1322+ Memcheck:Leak
1323+ fun:*alloc
1324+ fun:strdup
1325+ ...
1326+ fun:snd_config_update_r
1327+ fun:snd_config_update
1328+}
1329+{
1330+ <alsa leak snd_config_searcha_hooks>
1331+ Memcheck:Leak
1332+ fun:*alloc
1333+ fun:_dl_close_worker
1334+ ...
1335+ fun:snd_config_searcha_hooks
1336+}
1337+
1338+{
1339+ <nss lookup within ALSA>
1340+ Memcheck:Leak
1341+ fun:malloc
1342+ obj:/lib/libc*.so
1343+ fun:__nss_database_lookup
1344+ obj:*
1345+ obj:*
1346+ fun:getgrnam_r
1347+ fun:getgrnam
1348+ fun:snd_pcm_direct_parse_open_conf
1349+}
1350+
1351+{
1352+ <libxcb leak on Ubuntu Feisty>
1353+ Memcheck:Leak
1354+ fun:calloc
1355+ fun:_XCBInitDisplayLock
1356+ fun:XOpenDisplay
1357+}
1358+
1359+# GConf internal initialisations related to getting the default client.
1360+{
1361+ <Orbit something or other>
1362+ Memcheck:Leak
1363+ fun:calloc
1364+ fun:g_malloc0
1365+ fun:ORBit_alloc_tcval
1366+ obj:/usr/lib/libORBit-2.so.*
1367+ fun:ORBit_demarshal_IOR
1368+ fun:ORBit_demarshal_object
1369+ fun:CORBA_ORB_string_to_object
1370+ obj:/usr/lib/libgconf-2.so.*
1371+ fun:gconf_get_current_lock_holder
1372+ fun:gconf_activate_server
1373+ obj:/usr/lib/libgconf-2.so.*
1374+ obj:/usr/lib/libgconf-2.so.*
1375+ fun:gconf_engine_get_default
1376+}
1377+{
1378+ <gconf internal leak>
1379+ Memcheck:Leak
1380+ fun:calloc
1381+ fun:g_malloc0
1382+ fun:ORBit_alloc_tcval
1383+ obj:*
1384+ fun:PortableServer_POA_servant_to_reference
1385+ fun:*
1386+ fun:*
1387+ fun:*
1388+ fun:gconf_engine_get_default
1389+}
1390+{
1391+ <gconf internal leak>
1392+ Memcheck:Leak
1393+ fun:calloc
1394+ fun:g_malloc0
1395+ fun:ORBit_alloc_tcval
1396+ obj:/usr/lib/libORBit-2.so.*
1397+ fun:ORBit_demarshal_IOR
1398+ fun:ORBit_demarshal_object
1399+ fun:CORBA_ORB_string_to_object
1400+ obj:/usr/lib/libgconf-2.so.*
1401+ fun:gconf_get_current_lock_holder
1402+ fun:gconf_activate_server
1403+ obj:/usr/lib/libgconf-2.so.*
1404+ obj:/usr/lib/libgconf-2.so.*
1405+ fun:gconf_engine_get_default
1406+}
1407+{
1408+ <gconf internal initialisation>
1409+ Memcheck:Leak
1410+ fun:calloc
1411+ fun:g_malloc0
1412+ fun:ORBit_alloc*
1413+ fun:*
1414+ fun:ORBit_demarshal_IOR
1415+ fun:ORBit_demarshal_object
1416+ fun:ORBit_demarshal_value
1417+ fun:*
1418+ fun:ORBit_small_invoke_stub
1419+ fun:ConfigServer_get_default_database
1420+ fun:*
1421+ fun:gconf_engine_get_default
1422+}
1423+{
1424+ <gconf internal init>
1425+ Memcheck:Leak
1426+ fun:calloc
1427+ fun:g_malloc0
1428+ fun:ORBit_alloc*
1429+ fun:*
1430+ fun:IOP_generate_profiles
1431+ fun:ORBit_marshal_object
1432+ fun:ORBit_marshal_value
1433+ fun:*
1434+ fun:ORBit_small_invoke_stub
1435+ fun:ConfigServer_add_client
1436+ fun:*
1437+ fun:*
1438+ fun:gconf_engine_get_default
1439+}
1440+{
1441+ <gconf internal init>
1442+ Memcheck:Leak
1443+ fun:calloc
1444+ fun:g_malloc0
1445+ fun:ORBit_alloc_by_tc
1446+ fun:*
1447+ fun:PortableServer_POA_servant_to_reference
1448+ fun:*
1449+ fun:*
1450+ fun:*
1451+ fun:gconf_engine_get_default
1452+}
1453+{
1454+ <gconf internal init>
1455+ Memcheck:Leak
1456+ fun:calloc
1457+ fun:g_malloc0
1458+ fun:ORBit_alloc_by_tc
1459+ obj:/usr/lib/libORBit-2.so.*
1460+ fun:ORBit_demarshal_IOR
1461+ fun:ORBit_demarshal_object
1462+ fun:CORBA_ORB_string_to_object
1463+ obj:/usr/lib/libgconf-2.so.*
1464+ fun:gconf_get_current_lock_holder
1465+ fun:gconf_activate_server
1466+ obj:/usr/lib/libgconf-2.so.*
1467+ obj:/usr/lib/libgconf-2.so.*
1468+ fun:gconf_engine_get_default
1469+}
1470+
1471+{
1472+ <insert a suppression name here>
1473+ Memcheck:Leak
1474+ fun:calloc
1475+ fun:g_malloc0
1476+ fun:ORBit_alloc*
1477+ fun:*
1478+ fun:ORBit_demarshal_IOR
1479+ fun:ORBit_demarshal_object
1480+ fun:*
1481+ fun:*
1482+ fun:gconf_activate_server
1483+}
1484+
1485+# Some libORBit/bonobo initialisation stuff
1486+{
1487+ <bonobo init>
1488+ Memcheck:Leak
1489+ fun:malloc
1490+ fun:g_malloc
1491+ fun:ORBit_alloc_string
1492+ fun:CORBA_string_dup
1493+ fun:Bonobo_ActivationEnvValue_set
1494+ fun:bonobo_activation_init_activation_env
1495+ fun:bonobo_activation_orb_init
1496+ fun:bonobo_activation_init
1497+}
1498+{
1499+ <bonobo init>
1500+ Memcheck:Leak
1501+ fun:calloc
1502+ fun:g_malloc0
1503+ fun:ORBit_alloc*
1504+ fun:ORBit_small_alloc*
1505+ obj:/usr/lib/libORBit-2.so*
1506+ fun:PortableServer_POA_servant_to_reference
1507+ obj:/usr/lib/libbonobo-2.so*
1508+}
1509+{
1510+ <bonobo init>
1511+ Memcheck:Leak
1512+ fun:calloc
1513+ fun:g_malloc0
1514+ fun:ORBit_alloc_tcval
1515+ fun:ORBit_small_allocbuf
1516+ fun:ORBit_adaptor_setup
1517+ obj:/usr/lib/libORBit-2.so*
1518+ fun:ORBit_POA_setup_root
1519+ fun:ORBit_init_internals
1520+ fun:CORBA_ORB_init
1521+}
1522+{
1523+ <bonobo init - more recent variant of above>
1524+ Memcheck:Leak
1525+ fun:calloc
1526+ fun:g_malloc0
1527+ fun:ORBit_alloc_tcval
1528+ fun:ORBit_adaptor_setup
1529+ fun:*
1530+ fun:ORBit_POA_setup_root
1531+ fun:ORBit_init_internals
1532+ fun:CORBA_ORB_init
1533+}
1534+{
1535+ <bonobo init>
1536+ Memcheck:Leak
1537+ fun:calloc
1538+ fun:g_malloc0
1539+ fun:ORBit_alloc*
1540+ fun:ORBit_small_allocbuf
1541+ fun:bonobo_activation_init_activation_env
1542+ fun:bonobo_activation_orb_init
1543+ fun:bonobo_activation_init
1544+}
1545+
1546+# More GConf stuff from the FC5 buildbot, mostly variations on the
1547+# above stack traces
1548+{
1549+ <incompletely initialised ORBit buffer>
1550+ Memcheck:Param
1551+ writev(vector[...])
1552+ fun:writev
1553+ obj:/usr/lib/libORBit-2.so*
1554+ fun:link_connection_writev
1555+ fun:giop_send_buffer_write
1556+ obj:/usr/lib/libORBit-2.so*
1557+ fun:ORBit_small_invoke_stub
1558+ fun:ORBit_small_invoke_stub_n
1559+ fun:ORBit_c_stub_invoke
1560+ fun:ConfigServer_ping
1561+ fun:gconf_activate_server
1562+ obj:/usr/lib/libgconf-2.so*
1563+ obj:/usr/lib/libgconf-2.so*
1564+ fun:gconf_engine_get_default
1565+}
1566+{
1567+ <gconf init>
1568+ Memcheck:Leak
1569+ fun:calloc
1570+ fun:g_malloc0
1571+ fun:ORBit_alloc*
1572+ fun:ORBit_small_alloc*
1573+ obj:/usr/lib/libORBit-2.so*
1574+ fun:PortableServer_POA_servant_to_reference
1575+ obj:/usr/lib/libgconf-2.so*
1576+ obj:/usr/lib/libgconf-2.so*
1577+ obj:/usr/lib/libgconf-2.so*
1578+ fun:gconf_engine_get_default
1579+}
1580+{
1581+ <gconf init>
1582+ Memcheck:Leak
1583+ fun:calloc
1584+ fun:g_malloc0
1585+ fun:ORBit_alloc*
1586+ fun:ORBit_small_alloc
1587+ obj:/usr/lib/libORBit-2.so*
1588+ fun:ORBit_demarshal_IOR
1589+ fun:ORBit_demarshal_object
1590+ fun:CORBA_ORB_string_to_object
1591+ obj:/usr/lib/libgconf-2.so*
1592+ fun:gconf_get_current_lock_holder
1593+ fun:gconf_activate_server
1594+ obj:/usr/lib/libgconf-2.so*
1595+ obj:/usr/lib/libgconf-2.so*
1596+ fun:gconf_engine_get_default
1597+}
1598+{
1599+ <gconf init>
1600+ Memcheck:Leak
1601+ fun:calloc
1602+ fun:g_malloc0
1603+ fun:ORBit_alloc*
1604+ fun:ORBit_small_alloc*
1605+ obj:/usr/lib/libORBit-2.so*
1606+ fun:ORBit_demarshal_IOR
1607+ fun:ORBit_demarshal_object
1608+ fun:CORBA_ORB_string_to_object
1609+ obj:/usr/lib/libgconf-2.so*
1610+ fun:gconf_get_current_lock_holder
1611+ fun:gconf_activate_server
1612+ obj:/usr/lib/libgconf-2.so*
1613+ obj:/usr/lib/libgconf-2.so*
1614+ fun:gconf_engine_get_default
1615+}
1616+{
1617+ <bonobo init>
1618+ Memcheck:Leak
1619+ fun:calloc
1620+ fun:g_malloc0
1621+ fun:ORBit_alloc*
1622+ fun:ORBit_small_alloc*
1623+ obj:/usr/lib/libORBit-2.so*
1624+ fun:ORBit_demarshal_IOR
1625+ fun:ORBit_demarshal_object
1626+ fun:ORBit_demarshal_value
1627+ obj:/usr/lib/libORBit-2.so*
1628+ fun:ORBit_small_invoke_stub
1629+ fun:ORBit_small_invoke_stub_n
1630+ fun:ORBit_c_stub_invoke
1631+ fun:ConfigServer_get_default_database
1632+ obj:/usr/lib/libgconf-2.so*
1633+ fun:gconf_engine_get_default
1634+}
1635+{
1636+ <gconf init>
1637+ Memcheck:Leak
1638+ fun:calloc
1639+ fun:g_malloc0
1640+ fun:ORBit_alloc*
1641+ fun:ORBit_small_alloc*
1642+ obj:/usr/lib/libORBit-2.so*
1643+ fun:ORBit_OAObject_object_to_objkey
1644+ fun:IOP_generate_profiles
1645+ fun:ORBit_marshal_object
1646+ fun:ORBit_marshal_value
1647+ obj:/usr/lib/libORBit-2.so*
1648+ fun:ORBit_small_invoke_stub
1649+ fun:ORBit_small_invoke_stub_n
1650+ fun:ORBit_c_stub_invoke
1651+ fun:ConfigServer_add_client
1652+ obj:/usr/lib/libgconf-2.so*
1653+ obj:/usr/lib/libgconf-2.so*
1654+ fun:gconf_engine_get_default
1655+}
1656+{
1657+ <GLib caching the home dir>
1658+ Memcheck:Leak
1659+ fun:malloc
1660+ obj:*libc-*.so
1661+ fun:__nss_database_lookup
1662+ obj:*
1663+ obj:*
1664+ fun:getpwnam_r
1665+ obj:/usr/lib*/libglib-2.0.so.*
1666+ fun:g_get_home_dir
1667+}
1668+{
1669+ <GLib caching the user name>
1670+ Memcheck:Leak
1671+ fun:malloc
1672+ obj:*libc-*.so
1673+ fun:__nss_database_lookup
1674+ obj:*
1675+ obj:*
1676+ fun:getpwnam_r
1677+ obj:/usr/lib*/libglib-2.0.so.*
1678+ fun:g_get_user_name
1679+}
1680+{
1681+ <GLib caching the tmp dir>
1682+ Memcheck:Leak
1683+ fun:malloc
1684+ obj:*libc-*.so
1685+ fun:__nss_database_lookup
1686+ obj:*
1687+ obj:*
1688+ fun:getpwnam_r
1689+ obj:/usr/lib*/libglib-2.0.so.*
1690+ fun:g_get_tmp_dir
1691+}
1692+
1693+{
1694+ <GLib caching the host name>
1695+ Memcheck:Leak
1696+ fun:malloc
1697+ obj:*libc-*.so
1698+ fun:__nss_database_lookup
1699+ obj:*
1700+ obj:*
1701+ fun:getpwnam_r
1702+ obj:/usr/lib*/libglib-2.0.so.0.*
1703+ fun:g_get_host_name
1704+}
1705+
1706+
1707+## Some Fontconfig errors.
1708+{
1709+ <First time load of a font - feisty x86_64>
1710+ Memcheck:Leak
1711+ fun:malloc
1712+ fun:FcPatternObjectInsertElt
1713+ fun:FcPatternObjectAddWithBinding
1714+ fun:FcPatternAppend
1715+ fun:FcEndElement
1716+ obj:/usr/lib/libexpat.so.*
1717+ obj:/usr/lib/libexpat.so.*
1718+ obj:/usr/lib/libexpat.so.*
1719+ obj:/usr/lib/libexpat.so.*
1720+ fun:XML_ParseBuffer
1721+ fun:FcConfigParseAndLoad
1722+ fun:FcConfigParseAndLoad
1723+ fun:FcParseInclude
1724+ fun:FcEndElement
1725+ obj:/usr/lib/libexpat.so.*
1726+ obj:/usr/lib/libexpat.so.*
1727+ obj:/usr/lib/libexpat.so.*
1728+ obj:/usr/lib/libexpat.so.*
1729+ fun:XML_ParseBuffer
1730+ fun:FcConfigParseAndLoad
1731+}
1732+{
1733+ <First time load of a font - generic>
1734+ Memcheck:Leak
1735+ fun:*alloc
1736+ ...
1737+ fun:FcInitLoadConfig
1738+}
1739+
1740+# Issues with ubuntu Hardy, same crack as for previous ubuntus
1741+{
1742+ <tls leak generic ubuntu hardy x86>
1743+ Memcheck:Leak
1744+ fun:calloc
1745+ obj:*
1746+ fun:_dl_allocate_tls
1747+ fun:pthread_create@@*
1748+ obj:/usr/lib/libgthread*
1749+ fun:g_thread_*
1750+}
1751+
1752+# I've made this version generic, so that it covers future modifications
1753+# of library names
1754+{
1755+ <tls leak generic>
1756+ Memcheck:Leak
1757+ fun:calloc
1758+ obj:*
1759+ fun:_dl_allocate_tls
1760+ fun:pthread_create@@*
1761+ fun:g_thread_*
1762+}
1763+
1764+# series of invalid read of size 4 in g_module_open for ubuntu
1765+# hardy x86/32bit
1766+{
1767+ <invalid read of size 4 within <g_module_open>
1768+ Memcheck:Addr4
1769+ obj:/lib/ld-2.7.so
1770+ obj:/lib/ld-2.7.so
1771+ obj:/lib/ld-2.7.so
1772+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1773+ obj:/lib/ld-2.7.so
1774+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1775+ fun:dlopen
1776+ fun:g_module_open
1777+ fun:gst_plugin_load_*
1778+}
1779+
1780+{
1781+ <invalid read of size 4 within <g_module_open>
1782+ Memcheck:Addr4
1783+ obj:/lib/ld-2.7.so
1784+ obj:/lib/ld-2.7.so
1785+ obj:/lib/ld-2.7.so
1786+ obj:/lib/ld-2.7.so
1787+ obj:/lib/ld-2.7.so
1788+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1789+ obj:/lib/ld-2.7.so
1790+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1791+ fun:dlopen
1792+ fun:g_module_open
1793+ fun:gst_plugin_load_*
1794+}
1795+
1796+{
1797+ <invalid read of size 4 within <g_module_open>
1798+ Memcheck:Addr4
1799+ obj:/lib/ld-2.7.so
1800+ obj:/lib/ld-2.7.so
1801+ obj:/lib/ld-2.7.so
1802+ obj:/lib/ld-2.7.so
1803+ obj:/lib/ld-2.7.so
1804+ obj:/lib/ld-2.7.so
1805+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1806+ obj:/lib/ld-2.7.so
1807+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1808+ fun:dlopen
1809+ fun:g_module_open
1810+ fun:gst_plugin_load_*
1811+}
1812+
1813+{
1814+ <invalid read of size 4 within <g_module_open>
1815+ Memcheck:Addr4
1816+ obj:/lib/ld-2.7.so
1817+ obj:/lib/ld-2.7.so
1818+ obj:/lib/ld-2.7.so
1819+ obj:/lib/ld-2.7.so
1820+ obj:/lib/ld-2.7.so
1821+ obj:/lib/ld-2.7.so
1822+ obj:/lib/ld-2.7.so
1823+ obj:/lib/ld-2.7.so
1824+ obj:/lib/ld-2.7.so
1825+ obj:/lib/ld-2.7.so
1826+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1827+ obj:/lib/ld-2.7.so
1828+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1829+ fun:dlopen
1830+ fun:g_module_open
1831+ fun:gst_plugin_load_*
1832+}
1833+
1834+{
1835+ <invalid read of size 4 within <g_module_open>
1836+ Memcheck:Addr4
1837+ obj:/lib/ld-2.7.so
1838+ obj:/lib/ld-2.7.so
1839+ obj:/lib/ld-2.7.so
1840+ obj:/lib/ld-2.7.so
1841+ obj:/lib/ld-2.7.so
1842+ obj:/lib/ld-2.7.so
1843+ obj:/lib/ld-2.7.so
1844+ obj:/lib/ld-2.7.so
1845+ obj:/lib/ld-2.7.so
1846+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1847+ obj:/lib/ld-2.7.so
1848+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1849+ fun:dlopen
1850+ fun:g_module_open
1851+ fun:gst_plugin_load*
1852+}
1853+
1854+{
1855+ <invalid read of size 4 within <g_module_open>
1856+ Memcheck:Addr4
1857+ obj:/lib/ld-2.7.so
1858+ obj:/lib/ld-2.7.so
1859+ obj:/lib/ld-2.7.so
1860+ obj:/lib/tls/i686/cmov/libc-2.7.so
1861+ fun:_dl_sym
1862+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1863+ obj:/lib/ld-2.7.so
1864+ obj:/lib/tls/i686/cmov/libdl-2.7.so
1865+ fun:dlsym
1866+ fun:g_module_symbol
1867+ fun:g_module_open
1868+ fun:gst_plugin_load_*
1869+}
1870+
1871+# series of invalid read of size 8 in g_module_open for ubuntu
1872+# hardy x86/64bit
1873+{
1874+ <invalid read of size 8 within <g_module_open>
1875+ Memcheck:Addr8
1876+ obj:/lib/ld-2.7.so
1877+ obj:/lib/ld-2.7.so
1878+ obj:/lib/ld-2.7.so
1879+ obj:/lib/ld-2.7.so
1880+ obj:/lib/ld-2.7.so
1881+ obj:/lib/ld-2.7.so
1882+ obj:/lib/ld-2.7.so
1883+ obj:/lib/libdl-2.7.so
1884+ obj:/lib/ld-2.7.so
1885+ obj:/lib/libdl-2.7.so
1886+ fun:dlopen
1887+ fun:g_module_open
1888+}
1889+
1890+{
1891+ <invalid read of size 8 within <g_module_open>
1892+ Memcheck:Addr8
1893+ obj:/lib/ld-2.7.so
1894+ obj:/lib/ld-2.7.so
1895+ obj:/lib/ld-2.7.so
1896+ obj:/lib/ld-2.7.so
1897+ obj:/lib/libdl-2.7.so
1898+ obj:/lib/ld-2.7.so
1899+ obj:/lib/libdl-2.7.so
1900+ fun:dlopen
1901+ fun:g_module_open
1902+}
1903+
1904+{
1905+ <invalid read of size 8 within <g_module_open>
1906+ Memcheck:Addr8
1907+ obj:/lib/ld-2.7.so
1908+ obj:/lib/ld-2.7.so
1909+ obj:/lib/ld-2.7.so
1910+ obj:/lib/ld-2.7.so
1911+ obj:/lib/ld-2.7.so
1912+ obj:/lib/ld-2.7.so
1913+ obj:/lib/libdl-2.7.so
1914+ obj:/lib/ld-2.7.so
1915+ obj:/lib/libdl-2.7.so
1916+ fun:dlopen
1917+ fun:g_module_open
1918+}
1919+
1920+{
1921+ <invalid read of size 8 within <g_module_open>
1922+ Memcheck:Addr8
1923+ obj:/lib/ld-2.7.so
1924+ obj:/lib/ld-2.7.so
1925+ obj:/lib/ld-2.7.so
1926+ obj:/lib/ld-2.7.so
1927+ obj:/lib/ld-2.7.so
1928+ obj:/lib/ld-2.7.so
1929+ obj:/lib/ld-2.7.so
1930+ obj:/lib/ld-2.7.so
1931+ obj:/lib/ld-2.7.so
1932+ obj:/lib/ld-2.7.so
1933+ obj:/lib/libdl-2.7.so
1934+ obj:/lib/ld-2.7.so
1935+ obj:/lib/libdl-2.7.so
1936+ fun:dlopen
1937+ fun:g_module_open
1938+}
1939+
1940+{
1941+ <invalid read of size 8 within <g_module_open>
1942+ Memcheck:Addr8
1943+ obj:/lib/ld-2.7.so
1944+ obj:/lib/ld-2.7.so
1945+ obj:/lib/ld-2.7.so
1946+ obj:/lib/ld-2.7.so
1947+ obj:/lib/ld-2.7.so
1948+ obj:/lib/libdl-2.7.so
1949+ obj:/lib/ld-2.7.so
1950+ obj:/lib/libdl-2.7.so
1951+ fun:dlopen
1952+ fun:g_module_open
1953+}
1954+
1955+{
1956+ <invalid read of size 8 within <g_module_open>
1957+ Memcheck:Addr8
1958+ obj:/lib/ld-2.7.so
1959+ obj:/lib/ld-2.7.so
1960+ obj:/lib/libdl-2.7.so
1961+ obj:/lib/ld-2.7.so
1962+ obj:/lib/libdl-2.7.so
1963+ fun:dlopen
1964+ fun:g_module_open
1965+}
1966+
1967+{
1968+ <invalid read of size 8 within <g_module_open>
1969+ Memcheck:Addr8
1970+ obj:/lib/ld-2.7.so
1971+ obj:/lib/ld-2.7.so
1972+ obj:/lib/ld-2.7.so
1973+ obj:/lib/ld-2.7.so
1974+ obj:/lib/libc-2.7.so
1975+ obj:/lib/libdl-2.7.so
1976+ obj:/lib/ld-2.7.so
1977+ obj:/lib/libdl-2.7.so
1978+ fun:dlsym
1979+ fun:g_module_symbol
1980+ fun:g_module_open
1981+}
1982+
1983+{
1984+ <GLib caching>
1985+ Memcheck:Addr4
1986+ obj:/lib/ld-2.7.so
1987+ obj:/lib/ld-2.7.so
1988+ obj:/lib/ld-2.7.so
1989+ obj:/lib/ld-2.7.so
1990+ obj:/lib/ld-2.7.so
1991+ obj:/lib/ld-2.7.so
1992+ obj:/lib/tls/i686/cmov/libc-2.7.so
1993+ obj:/lib/ld-2.7.so
1994+ fun:__libc_dlopen_mode
1995+ fun:__nss_lookup_function
1996+ obj:/lib/tls/i686/cmov/libc-2.7.so
1997+ fun:__nss_passwd_lookup
1998+ fun:getpwnam_r
1999+}
2000+
2001+{
2002+ <GLib caching>
2003+ Memcheck:Addr4
2004+ obj:/lib/ld-2.7.so
2005+ obj:/lib/ld-2.7.so
2006+ obj:/lib/ld-2.7.so
2007+ obj:/lib/ld-2.7.so
2008+ obj:/lib/ld-2.7.so
2009+ obj:/lib/ld-2.7.so
2010+ obj:/lib/ld-2.7.so
2011+ obj:/lib/ld-2.7.so
2012+ obj:/lib/ld-2.7.so
2013+ obj:/lib/tls/i686/cmov/libc-2.7.so
2014+ obj:/lib/ld-2.7.so
2015+ fun:__libc_dlopen_mode
2016+ fun:__nss_lookup_function
2017+ obj:/lib/tls/i686/cmov/libc-2.7.so
2018+ fun:__nss_passwd_lookup
2019+ fun:getpwnam_r
2020+}
2021+
2022+{
2023+ <GLib caching>
2024+ Memcheck:Addr4
2025+ obj:/lib/ld-2.7.so
2026+ obj:/lib/ld-2.7.so
2027+ obj:/lib/ld-2.7.so
2028+ obj:/lib/ld-2.7.so
2029+ obj:/lib/ld-2.7.so
2030+ obj:/lib/ld-2.7.so
2031+ obj:/lib/tls/i686/cmov/libc-2.7.so
2032+ obj:/lib/ld-2.7.so
2033+ fun:__libc_dlopen_mode
2034+ fun:__nss_lookup_function
2035+ obj:/lib/tls/i686/cmov/libnss_compat-2.7.so
2036+ fun:_nss_compat_getpwnam_r
2037+ fun:getpwnam_r
2038+}
2039+
2040+{
2041+ <GLib caching>
2042+ Memcheck:Addr4
2043+ obj:/lib/ld-2.7.so
2044+ obj:/lib/ld-2.7.so
2045+ obj:/lib/ld-2.7.so
2046+ obj:/lib/ld-2.7.so
2047+ obj:/lib/ld-2.7.so
2048+ obj:/lib/ld-2.7.so
2049+ obj:/lib/ld-2.7.so
2050+ obj:/lib/ld-2.7.so
2051+ obj:/lib/ld-2.7.so
2052+ obj:/lib/tls/i686/cmov/libc-2.7.so
2053+ obj:/lib/ld-2.7.so
2054+ fun:__libc_dlopen_mode
2055+ fun:__nss_lookup_function
2056+ obj:/lib/tls/i686/cmov/libnss_compat-2.7.so
2057+ fun:_nss_compat_getpwnam_r
2058+ fun:getpwnam_r
2059+}
2060+
2061+{
2062+ <GLib caching>
2063+ Memcheck:Addr8
2064+ obj:/lib/ld-2.7.so
2065+ obj:/lib/ld-2.7.so
2066+ obj:/lib/ld-2.7.so
2067+ obj:/lib/ld-2.7.so
2068+ obj:/lib/ld-2.7.so
2069+ obj:/lib/ld-2.7.so
2070+ obj:/lib/ld-2.7.so
2071+ obj:/lib/ld-2.7.so
2072+ obj:/lib/ld-2.7.so
2073+ obj:/lib/ld-2.7.so
2074+ obj:/lib/libc-2.7.so
2075+ obj:/lib/ld-2.7.so
2076+ fun:__libc_dlopen_mode
2077+ fun:__nss_lookup_function
2078+ obj:/lib/libc-2.7.so
2079+ fun:getpwnam_r
2080+}
2081+
2082+## Leaks in ALSA (variations of leak from snd_config_load1)
2083+
2084+{
2085+ <Alsa leak>
2086+ Memcheck:Leak
2087+ fun:calloc
2088+ fun:_snd_config_make
2089+ fun:_snd_config_make_add
2090+ fun:*
2091+ fun:*
2092+ fun:*
2093+ fun:*
2094+ fun:snd_config_load1
2095+}
2096+
2097+{
2098+ <Alsa leak>
2099+ Memcheck:Leak
2100+ fun:calloc
2101+ fun:_snd_config_make
2102+ fun:_snd_config_make_add
2103+ fun:*
2104+ fun:*
2105+ fun:snd_config_load1
2106+}
2107+{
2108+ <Alsa leak>
2109+ Memcheck:Leak
2110+ fun:calloc
2111+ fun:_snd_config_make
2112+ fun:_snd_config_make_add
2113+ fun:*
2114+ fun:*
2115+ fun:*
2116+ fun:snd_config_load1
2117+}
2118+{
2119+ <Alsa leak>
2120+ Memcheck:Leak
2121+ fun:calloc
2122+ fun:_snd_config_make
2123+ fun:_snd_config_make_add
2124+ fun:*
2125+ fun:*
2126+ fun:*
2127+ fun:*
2128+ fun:*
2129+ fun:snd_config_load1
2130+}
2131+
2132+{
2133+ <Alsa leak>
2134+ Memcheck:Leak
2135+ fun:calloc
2136+ fun:_snd_config_make
2137+ fun:_snd_config_make_add
2138+ fun:*
2139+ fun:*
2140+ fun:*
2141+ fun:*
2142+ fun:*
2143+ fun:*
2144+ fun:snd_config_load1
2145+}
2146+
2147+{
2148+ <Alsa leak>
2149+ Memcheck:Leak
2150+ fun:calloc
2151+ fun:_snd_config_make
2152+ fun:_snd_config_make_add
2153+ fun:*
2154+ fun:*
2155+ fun:*
2156+ fun:*
2157+ fun:*
2158+ fun:*
2159+ fun:*
2160+ fun:snd_config_load1
2161+}
2162+{
2163+ <Alsa leak>
2164+ Memcheck:Leak
2165+ fun:calloc
2166+ fun:_snd_config_make
2167+ fun:_snd_config_make_add
2168+ fun:*
2169+ fun:*
2170+ fun:*
2171+ fun:*
2172+ fun:*
2173+ fun:*
2174+ fun:*
2175+ fun:*
2176+ fun:snd_config_load1
2177+}
2178+
2179+{
2180+ <Alsa leak>
2181+ Memcheck:Leak
2182+ fun:malloc
2183+ fun:snd1_dlobj_cache_add
2184+ fun:snd_ctl_open_noupdate
2185+}
2186+
2187+{
2188+ <Alsa leak>
2189+ Memcheck:Leak
2190+ fun:malloc
2191+ fun:*
2192+ fun:snd1_dlobj_cache_add
2193+ fun:snd_ctl_open_noupdate
2194+}
2195+
2196+{
2197+ <Alsa leak>
2198+ Memcheck:Leak
2199+ fun:*alloc
2200+ fun:*
2201+ fun:*
2202+ fun:*
2203+ fun:snd_config_load1
2204+}
2205+
2206+{
2207+ <Alsa leak>
2208+ Memcheck:Leak
2209+ fun:*alloc
2210+ fun:*
2211+ fun:*
2212+ fun:*
2213+ fun:*
2214+ fun:snd_config_load1
2215+}
2216+
2217+{
2218+ <Alsa leak>
2219+ Memcheck:Leak
2220+ fun:*alloc
2221+ fun:*
2222+ fun:*
2223+ fun:*
2224+ fun:*
2225+ fun:*
2226+ fun:snd_config_load1
2227+}
2228+
2229+{
2230+ <Alsa leak>
2231+ Memcheck:Leak
2232+ fun:*alloc
2233+ fun:*
2234+ fun:*
2235+ fun:*
2236+ fun:*
2237+ fun:*
2238+ fun:*
2239+ fun:snd_config_load1
2240+}
2241+
2242+{
2243+ <Alsa leak>
2244+ Memcheck:Leak
2245+ fun:*alloc
2246+ fun:*
2247+ fun:*
2248+ fun:*
2249+ fun:*
2250+ fun:*
2251+ fun:*
2252+ fun:*
2253+ fun:snd_config_load1
2254+}
2255+
2256+{
2257+ <Alsa leak>
2258+ Memcheck:Leak
2259+ fun:*alloc
2260+ fun:*
2261+ fun:*
2262+ fun:*
2263+ fun:*
2264+ fun:*
2265+ fun:*
2266+ fun:*
2267+ fun:*
2268+ fun:snd_config_load1
2269+}
2270+
2271+{
2272+ <Alsa leak>
2273+ Memcheck:Leak
2274+ fun:*alloc
2275+ fun:*
2276+ fun:*
2277+ fun:*
2278+ fun:*
2279+ fun:*
2280+ fun:*
2281+ fun:*
2282+ fun:*
2283+ fun:*
2284+ fun:snd_config_load1
2285+}
2286+
2287+{
2288+ <Alsa leak>
2289+ Memcheck:Leak
2290+ fun:*alloc
2291+ fun:*
2292+ fun:*
2293+ fun:*
2294+ fun:*
2295+ fun:*
2296+ fun:*
2297+ fun:*
2298+ fun:*
2299+ fun:*
2300+ fun:*
2301+ fun:snd_config_load1
2302+}
2303+
2304+
2305+# The following are leaks of caps that need to be created dynamically
2306+# in the type registration of the plugin (used for pad templates).
2307+
2308+{
2309+ <Leak in ogmparsers>
2310+ Memcheck:Leak
2311+ fun:malloc
2312+ fun:g_malloc
2313+ fun:g_slice_alloc
2314+ fun:gst_caps_new_empty
2315+ fun:gst_caps_new_simple
2316+ fun:*
2317+ fun:g_type_class_ref
2318+ fun:gst_element_register
2319+}
2320+
2321+{
2322+ <Leak in ogmparsers>
2323+ Memcheck:Leak
2324+ fun:malloc
2325+ fun:g_malloc
2326+ fun:g_slice_alloc
2327+ fun:gst_caps_new_empty
2328+ fun:*
2329+ fun:*
2330+ fun:g_type_class_ref
2331+ fun:gst_element_register
2332+ fun:gst_ogm_parse_plugin_init
2333+ fun:plugin_init
2334+}
2335+
2336+{
2337+ <Leak in videotestsrc>
2338+ Memcheck:Leak
2339+ fun:malloc
2340+ fun:g_malloc
2341+ fun:g_slice_alloc
2342+ fun:gst_caps_new_empty
2343+ fun:gst_caps_copy
2344+ fun:gst_video_test_src_base_init
2345+ fun:g_type_class_ref
2346+ fun:gst_element_register
2347+}
2348+
2349+{
2350+ <Leak in videotestsrc>
2351+ Memcheck:Leak
2352+ fun:malloc
2353+ fun:g_malloc
2354+ fun:g_slice_alloc
2355+ fun:gst_caps_new_empty
2356+ fun:gst_caps_copy
2357+ fun:gst_video_test_src_getcaps
2358+ fun:gst_video_test_src_base_init
2359+ fun:g_type_class_ref
2360+ fun:gst_element_register
2361+}
2362+
2363+{
2364+ <Leak in ffmpegcolorspace>
2365+ Memcheck:Leak
2366+ fun:malloc
2367+ fun:g_malloc
2368+ fun:g_slice_alloc
2369+ fun:gst_caps_new_empty
2370+ fun:gst_ffmpegcsp_codectype_to_caps
2371+ fun:gst_ffmpegcolorspace_register
2372+ fun:plugin_init
2373+}
2374+
2375+{
2376+ <Leak in ffmpegocolorspace>
2377+ Memcheck:Leak
2378+ fun:malloc
2379+ fun:g_malloc
2380+ fun:g_slice_alloc
2381+ fun:gst_caps_new_empty
2382+ fun:gst_caps_copy
2383+ fun:gst_ffmpegcolorspace_register
2384+ fun:plugin_init
2385+}
2386+
2387+{
2388+ <Leak in gstffmpegdemux>
2389+ Memcheck:Leak
2390+ fun:malloc
2391+ fun:g_malloc
2392+ fun:g_slice_alloc
2393+ fun:gst_caps_new_empty
2394+ fun:gst_caps_new_any
2395+ fun:gst_ffmpegdemux_register
2396+ fun:plugin_init
2397+}
2398+
2399+{
2400+ <Leak in GstAudioFilter subclasses>
2401+ Memcheck:Leak
2402+ fun:malloc
2403+ fun:g_malloc
2404+ fun:g_slice_alloc
2405+ fun:gst_caps_new_empty
2406+ fun:gst_caps_copy
2407+ fun:gst_audio_filter_class_add_pad_templates
2408+}
2409+
2410+{
2411+ <Leak in GstAudioFilter subclasses, variant>
2412+ Memcheck:Leak
2413+ fun:realloc
2414+ fun:g_realloc
2415+ fun:g_ptr_array_maybe_expand
2416+ fun:g_ptr_array_add
2417+ fun:gst_caps_append
2418+ fun:gst_audio_filter_class_add_pad_templates
2419+}
2420+
2421+{
2422+ <Leak in GstAudioFilter subclasses, variant>
2423+ Memcheck:Leak
2424+ fun:malloc
2425+ fun:realloc
2426+ fun:g_realloc
2427+ fun:g_ptr_array_maybe_expand
2428+ fun:g_ptr_array_add
2429+ fun:gst_caps_append
2430+ fun:gst_audio_filter_class_add_pad_templates
2431+}
2432+
2433+{
2434+ <Leak in GstAudioFilter subclasses, variant>
2435+ Memcheck:Leak
2436+ fun:malloc
2437+ fun:realloc
2438+ fun:g_realloc
2439+ fun:g_ptr_array_maybe_expand
2440+ fun:g_ptr_array_add
2441+ fun:gst_caps_copy
2442+ fun:gst_audio_filter_class_add_pad_templates
2443+}
2444+
2445+{
2446+ <Leak in GstAudioFilter subclasses, variant2>
2447+ Memcheck:Leak
2448+ fun:malloc
2449+ fun:g_malloc
2450+ fun:g_slice_alloc
2451+ fun:g_ptr_array_sized_new
2452+ fun:gst_caps_new_empty
2453+ fun:gst_caps_copy
2454+ fun:gst_audio_filter_class_add_pad_templates
2455+}
2456+{
2457+ <Leak in GstAudioFilter subclasses, variant3>
2458+ Memcheck:Leak
2459+ fun:malloc
2460+ fun:realloc
2461+ fun:g_realloc
2462+ fun:g_array_maybe_expand
2463+ fun:g_array_sized_new
2464+ fun:*
2465+ fun:*
2466+ fun:*
2467+ fun:gst_value_init_and_copy
2468+ fun:gst_structure_copy
2469+ fun:gst_caps_copy
2470+ fun:gst_audio_filter_class_add_pad_templates
2471+}
2472+{
2473+ <Leak in GstAudioFilter subclasses, variant4>
2474+ Memcheck:Leak
2475+ fun:malloc
2476+ fun:realloc
2477+ fun:g_realloc
2478+ fun:g_array_maybe_expand
2479+ fun:g_array_sized_new
2480+ fun:*
2481+ fun:gst_structure_copy
2482+ fun:gst_caps_copy
2483+ fun:gst_audio_filter_class_add_pad_templates
2484+}
2485+{
2486+ <Leak in GstAudioFilter subclasses, variant5>
2487+ Memcheck:Leak
2488+ fun:malloc
2489+ fun:g_malloc
2490+ fun:g_slice_alloc
2491+ fun:g_array_sized_new
2492+ fun:*
2493+ fun:gst_structure_copy
2494+ fun:gst_caps_copy
2495+ fun:gst_audio_filter_class_add_pad_templates
2496+}
2497+
2498+{
2499+ <Leak in riff-media>
2500+ Memcheck:Leak
2501+ fun:malloc
2502+ fun:g_malloc
2503+ fun:g_slice_alloc
2504+ fun:gst_caps_new_empty
2505+ fun:gst_riff_create_*_template_caps
2506+}
2507+{
2508+ <Leak in riff-media>
2509+ Memcheck:Leak
2510+ fun:malloc
2511+ fun:realloc
2512+ fun:g_realloc
2513+ fun:*
2514+ fun:*
2515+ fun:*
2516+ fun:gst_structure_copy
2517+ fun:gst_caps_copy
2518+ fun:gst_caps_append
2519+ fun:gst_riff_create_*_template_caps
2520+}
2521+{
2522+ <Leak in riff-media>
2523+ Memcheck:Leak
2524+ fun:malloc
2525+ fun:g_malloc
2526+ fun:g_slice_alloc
2527+ fun:g_array_sized_new
2528+ fun:*
2529+ fun:gst_structure_copy
2530+ fun:gst_caps_copy
2531+ fun:gst_caps_append
2532+ fun:gst_riff_create_*_template_caps
2533+}
2534+
2535+## Leaks in pango (bilboed: gentoo unstable amd64)
2536+
2537+{
2538+ <Pango leak - generic>
2539+ Memcheck:Leak
2540+ fun:*alloc
2541+ ...
2542+ fun:pango_layout_get_pixel_extents
2543+}
2544+{
2545+ <insert a suppression name here>
2546+ Memcheck:Leak
2547+ fun:calloc
2548+ fun:g_malloc0
2549+ fun:pango_language_from_string
2550+ fun:pango_language_get_default
2551+ fun:pango_context_init
2552+ fun:g_type_create_instance
2553+ fun:g_object_constructor
2554+ fun:g_object_newv
2555+ fun:g_object_new_valist
2556+ fun:g_object_new
2557+ fun:pango_font_map_create_context
2558+}
2559+
2560+{
2561+ <PangoLanguage can never be freed>
2562+ Memcheck:Leak
2563+ fun:calloc
2564+ fun:g_malloc0
2565+ fun:pango_language_from_string
2566+}
2567+
2568+
2569+## Leak of everything allocated by gst-libav plugin init
2570+{
2571+ <insert_a_suppression_name_here>
2572+ Memcheck:Leak
2573+ fun:*alloc
2574+ ...
2575+ fun:gst_ffmpeg_cfg_init
2576+}
2577+
2578+## Leak of GIO module through gnomevfs
2579+
2580+{
2581+ <gio leak>
2582+ Memcheck:Leak
2583+ fun:malloc
2584+ fun:g_malloc
2585+ fun:*
2586+ fun:*
2587+ fun:g_type_create_instance
2588+ fun:*
2589+ fun:*
2590+ fun:*
2591+ fun:*
2592+ fun:g_io_module_new
2593+ fun:g_io_modules_load_all_in_directory
2594+ fun:*
2595+ fun:get_default_vfs
2596+}
2597+
2598+## Conditional jump in getaddrinfo (bilboed, gentoo ~amd64, Dec 13 2008)
2599+{
2600+ <Leak of addrinfo in esd>
2601+ Memcheck:Cond
2602+ fun:gaih_inet
2603+ fun:getaddrinfo
2604+}
2605+
2606+## Dynamic pad templates in mxfmux
2607+{
2608+ <Dynamic pad templates in mxfmux>
2609+ Memcheck:Leak
2610+ fun:malloc
2611+ fun:g_malloc
2612+ fun:g_slice_alloc
2613+ fun:gst_caps_new_empty
2614+ fun:gst_caps_from_string
2615+ fun:mxf_*_init
2616+ fun:plugin_init
2617+}
2618+
2619+## We don't know if ffmpeg frees this or not and better pass a copy for safety
2620+{
2621+ <insert a suppression name here>
2622+ Memcheck:Leak
2623+ fun:malloc
2624+ fun:g_malloc
2625+ fun:g_strdup
2626+ fun:gst_ffmpeg_cfg_fill_context
2627+ fun:gst_ffmpegenc_setcaps
2628+ fun:gst_pad_set_caps
2629+}
2630+
2631+## Leak/overreads with glibc-2.10
2632+
2633+{
2634+ <glibc-2.10 overreads/conditionals>
2635+ Memcheck:Value8
2636+ fun:do_sym
2637+ fun:dlsym_doit
2638+ fun:_dl_catch_error
2639+ fun:_dlerror_run
2640+ fun:dlsym
2641+}
2642+{
2643+ <glibc-2.10 overreads/conditionals>
2644+ Memcheck:Cond
2645+ fun:do_sym
2646+ fun:dlsym_doit
2647+ fun:_dl_catch_error
2648+ fun:_dlerror_run
2649+ fun:dlsym
2650+}
2651+
2652+{
2653+ <glibc-2.10 overreads/conditionals>
2654+ Memcheck:Value8
2655+ fun:dl_open_worker
2656+ fun:_dl_catch_error
2657+ fun:_dl_open
2658+ fun:dlopen_doit
2659+ fun:_dl_catch_error
2660+ fun:_dlerror_run
2661+ fun:dlopen*
2662+}
2663+
2664+{
2665+ <glibc-2.10 overreads/conditionals>
2666+ Memcheck:Value8
2667+ fun:_dl_relocate_object
2668+ fun:dl_open_worker
2669+ fun:_dl_catch_error
2670+ fun:_dl_open
2671+ fun:dlopen_doit
2672+ fun:_dl_catch_error
2673+ fun:_dlerror_run
2674+ fun:dlopen*
2675+}
2676+
2677+{
2678+ <glibc-2.10 overreads/conditionals>
2679+ Memcheck:Value8
2680+ fun:_dl_check_map_versions
2681+ fun:dl_open_worker
2682+ fun:_dl_catch_error
2683+ fun:_dl_open
2684+ fun:dlopen_doit
2685+ fun:_dl_catch_error
2686+ fun:_dlerror_run
2687+ fun:dlopen*
2688+}
2689+
2690+{
2691+ <glibc-2.10 overreads/conditionals>
2692+ Memcheck:Cond
2693+ fun:dl_open_worker
2694+ fun:_dl_catch_error
2695+ fun:_dl_open
2696+ fun:dlopen_doit
2697+ fun:_dl_catch_error
2698+ fun:_dlerror_run
2699+ fun:dlopen*
2700+}
2701+
2702+{
2703+ <glibc-2.10 overreads/conditionals>
2704+ Memcheck:Cond
2705+ fun:_dl_relocate_object
2706+ fun:dl_open_worker
2707+ fun:_dl_catch_error
2708+ fun:_dl_open
2709+ fun:dlopen_doit
2710+ fun:_dl_catch_error
2711+ fun:_dlerror_run
2712+ fun:dlopen*
2713+}
2714+
2715+{
2716+ <glibc-2.10 overreads/conditionals>
2717+ Memcheck:Cond
2718+ fun:_dl_check_map_versions
2719+ fun:dl_open_worker
2720+ fun:_dl_catch_error
2721+ fun:_dl_open
2722+ fun:dlopen_doit
2723+ fun:_dl_catch_error
2724+ fun:_dlerror_run
2725+ fun:dlopen*
2726+}
2727+
2728+{
2729+ <glibc-2.10 overreads/conditionals>
2730+ Memcheck:Cond
2731+ fun:_dl_map_object*
2732+ fun:dl_open_worker
2733+ fun:_dl_catch_error
2734+ fun:_dl_open
2735+ fun:dlopen_doit
2736+ fun:_dl_catch_error
2737+ fun:_dlerror_run
2738+ fun:dlopen*
2739+}
2740+
2741+{
2742+ <glibc-2.10 overreads/conditionals>
2743+ Memcheck:Value8
2744+ fun:_dl_map_object*
2745+ fun:dl_open_worker
2746+ fun:_dl_catch_error
2747+ fun:_dl_open
2748+ fun:dlopen_doit
2749+ fun:_dl_catch_error
2750+ fun:_dlerror_run
2751+ fun:dlopen*
2752+}
2753+
2754+{
2755+ <glibc-2.10 overreads/conditionals>
2756+ Memcheck:Value8
2757+ fun:_dl_check_caller
2758+ fun:dl_open_worker
2759+ fun:_dl_catch_error
2760+ fun:_dl_open
2761+ fun:dlopen_doit
2762+ fun:_dl_catch_error
2763+ fun:_dlerror_run
2764+ fun:dlopen*
2765+}
2766+
2767+{
2768+ <glibc-2.10 overreads/conditionals>
2769+ Memcheck:Cond
2770+ fun:_dl_check_caller
2771+ fun:dl_open_worker
2772+ fun:_dl_catch_error
2773+ fun:_dl_open
2774+ fun:dlopen_doit
2775+ fun:_dl_catch_error
2776+ fun:_dlerror_run
2777+ fun:dlopen*
2778+}
2779+
2780+{
2781+ <glibc-2.10 overreads/conditionals>
2782+ Memcheck:Value8
2783+ obj:/lib*/libc-2.10.*.so
2784+ obj:/lib*/libc-2.10.*.so
2785+ fun:_vgnU_freeres
2786+}
2787+{
2788+ <glibc-2.10 overreads/conditionals>
2789+ Memcheck:Cond
2790+ obj:/lib*/libc-2.10.*.so
2791+ obj:/lib*/libc-2.10.*.so
2792+ fun:_vgnU_freeres
2793+}
2794+{
2795+ <glibc-2.10 mysterious invalid free on exit>
2796+ Memcheck:Free
2797+ fun:free
2798+ obj:/lib*/libc-2.10.*.so
2799+ obj:/lib*/libc-2.10.*.so
2800+ fun:_vgnU_freeres
2801+}
2802+
2803+{
2804+ <glibc-2.10 overreads/conditionals>
2805+ Memcheck:Value8
2806+ fun:_dl_fini
2807+ fun:__run_exit_handlers
2808+ fun:exit
2809+}
2810+
2811+{
2812+ <glibc-2.10 overreads/conditionals>
2813+ Memcheck:Cond
2814+ fun:_dl_fini
2815+ fun:__run_exit_handlers
2816+ fun:exit
2817+}
2818+{
2819+ <glibc-2.10 overreads/conditionals>
2820+ Memcheck:Value8
2821+ fun:_dl_sort_fini
2822+ fun:_dl_fini
2823+ fun:__run_exit_handlers
2824+ fun:exit
2825+}
2826+
2827+{
2828+ <glibc-2.10 overreads/conditionals>
2829+ Memcheck:Cond
2830+ fun:_dl_sort_fini
2831+ fun:_dl_fini
2832+ fun:__run_exit_handlers
2833+ fun:exit
2834+}
2835+
2836+# glibc-2.10 dl overreads
2837+{
2838+ <glibc-2.10 overreads/conditionals>
2839+ Memcheck:Value8
2840+ fun:_dl_fixup
2841+ fun:_dl_runtime_resolve
2842+}
2843+{
2844+ <glibc-2.10 overreads/conditionals>
2845+ Memcheck:Cond
2846+ fun:_dl_fixup
2847+ fun:_dl_runtime_resolve
2848+}
2849+
2850+{
2851+ <glibc-2.10 overreads/conditionals>
2852+ Memcheck:Value8
2853+ fun:_dl_lookup_symbol_x
2854+ fun:_dl_fixup
2855+ fun:_dl_runtime_resolve
2856+}
2857+{
2858+ <glibc-2.10 overreads/conditionals>
2859+ Memcheck:Cond
2860+ fun:_dl_lookup_symbol_x
2861+ fun:_dl_fixup
2862+ fun:_dl_runtime_resolve
2863+}
2864+{
2865+ <glibc-2.10 overreads/conditionals>
2866+ Memcheck:Value8
2867+ fun:call_init
2868+ fun:_dl_init
2869+}
2870+{
2871+ <glibc-2.10 overreads/conditionals>
2872+ Memcheck:Value8
2873+ fun:_dl_init
2874+}
2875+{
2876+ <glibc-2.10 overreads/conditionals>
2877+ Memcheck:Value8
2878+ fun:do_lookup_x
2879+ fun:_dl_lookup_symbol_x
2880+ fun:_dl_relocate_object
2881+ fun:dl_main
2882+}
2883+{
2884+ <glibc-2.10 overreads/conditionals>
2885+ Memcheck:Cond
2886+ fun:do_lookup_x
2887+ fun:_dl_lookup_symbol_x
2888+ fun:_dl_relocate_object
2889+ fun:dl_main
2890+}
2891+{
2892+ <glibc-2.10 overreads/conditionals>
2893+ Memcheck:Value8
2894+ fun:_dl_lookup_symbol_x
2895+ fun:_dl_relocate_object
2896+ fun:dl_main
2897+}
2898+{
2899+ <glibc-2.10 overreads/conditionals>
2900+ Memcheck:Value8
2901+ fun:_dl_relocate_object
2902+ fun:dl_main
2903+}
2904+{
2905+ <glibc-2.10 overreads/conditionals>
2906+ Memcheck:Value8
2907+ fun:dl_main
2908+ fun:_dl_sysdep_start
2909+ fun:_dl_start
2910+}
2911+{
2912+ <glibc-2.10 overreads/conditionals>
2913+ Memcheck:Cond
2914+ fun:dl_main
2915+ fun:_dl_sysdep_start
2916+ fun:_dl_start
2917+}
2918+
2919+{
2920+ <glibc-2.10 overreads/conditionals>
2921+ Memcheck:Cond
2922+ fun:*
2923+ fun:do_lookup_x
2924+ fun:_dl_lookup_symbol_x
2925+ fun:_dl_relocate_object
2926+ fun:dl_main
2927+}
2928+
2929+{
2930+ <glibc-2.10 overreads/conditionals>
2931+ Memcheck:Value8
2932+ fun:*
2933+ fun:do_lookup_x
2934+ fun:_dl_lookup_symbol_x
2935+ fun:_dl_relocate_object
2936+ fun:dl_main
2937+}
2938+
2939+{
2940+ <glibc-2.10 overreads/conditionals>
2941+ Memcheck:Value8
2942+ fun:_dl_check_map_versions
2943+ fun:_dl_check_all_versions
2944+ fun:version_check_doit
2945+ fun:_dl_receive_error
2946+ fun:dl_main
2947+}
2948+
2949+{
2950+ <glibc-2.10 overreads/conditionals>
2951+ Memcheck:Cond
2952+ fun:_dl_check_map_versions
2953+ fun:_dl_check_all_versions
2954+ fun:version_check_doit
2955+ fun:_dl_receive_error
2956+ fun:dl_main
2957+}
2958+
2959+{
2960+ <glibc-2.10 overreads/conditionals>
2961+ Memcheck:Value8
2962+ fun:_dl_check_all_versions
2963+ fun:version_check_doit
2964+ fun:_dl_receive_error
2965+ fun:dl_main
2966+}
2967+
2968+{
2969+ <glibc-2.10 overreads/conditionals>
2970+ Memcheck:Cond
2971+ fun:_dl_check_all_versions
2972+ fun:version_check_doit
2973+ fun:_dl_receive_error
2974+ fun:dl_main
2975+}
2976+
2977+{
2978+ <glibc-2.10 overreads/conditionals>
2979+ Memcheck:Value8
2980+ fun:*
2981+ fun:_dl_check_map_versions
2982+ fun:_dl_check_all_versions
2983+ fun:version_check_doit
2984+ fun:_dl_receive_error
2985+ fun:dl_main
2986+}
2987+{
2988+ <glibc-2.10 overreads/conditionals>
2989+ Memcheck:Cond
2990+ fun:*
2991+ fun:_dl_check_map_versions
2992+ fun:_dl_check_all_versions
2993+ fun:version_check_doit
2994+ fun:_dl_receive_error
2995+ fun:dl_main
2996+}
2997+
2998+{
2999+ <glibc-2.10 overreads/conditionals>
3000+ Memcheck:Value8
3001+ fun:init_tls
3002+ fun:dl_main
3003+}
3004+{
3005+ <glibc-2.10 overreads/conditionals>
3006+ Memcheck:Cond
3007+ fun:init_tls
3008+ fun:dl_main
3009+}
3010+
3011+{
3012+ <glibc-2.10 overreads/conditionals>
3013+ Memcheck:Cond
3014+ fun:_dl_map_object_deps
3015+ fun:dl_main
3016+}
3017+{
3018+ <glibc-2.10 overreads/conditionals>
3019+ Memcheck:Value8
3020+ fun:_dl_map_object_deps
3021+ fun:dl_main
3022+}
3023+
3024+{
3025+ <glibc-2.10 overreads/conditionals>
3026+ Memcheck:Value8
3027+ fun:_dl_protect_relro
3028+ fun:_dl_relocate_object
3029+ fun:dl_main
3030+}
3031+
3032+{
3033+ <glibc-2.10 overreads/conditionals>
3034+ Memcheck:Value8
3035+ fun:*
3036+ fun:do_lookup_x
3037+ fun:_dl_lookup_symbol_x
3038+ fun:_dl_relocate_object
3039+ fun:dl_main
3040+}
3041+
3042+{
3043+ <glibc-2.10 overreads/conditionals>
3044+ Memcheck:Value8
3045+ fun:_dl_setup_hash
3046+ fun:_dl_map_object_from_fd
3047+ fun:_dl_map_object
3048+}
3049+
3050+{
3051+ <glibc-2.10 overreads/conditionals>
3052+ Memcheck:Value8
3053+ fun:*
3054+ fun:_dl_new_object
3055+ fun:_dl_map_object_from_fd
3056+ fun:_dl_map_object
3057+}
3058+
3059+{
3060+ <glibc-2.10 overreads/conditionals>
3061+ Memcheck:Cond
3062+ fun:*
3063+ fun:_dl_new_object
3064+ fun:_dl_map_object_from_fd
3065+ fun:_dl_map_object
3066+}
3067+
3068+{
3069+ <glibc-2.10 overreads/conditionals>
3070+ Memcheck:Value8
3071+ fun:openaux
3072+ fun:_dl_catch_error
3073+ fun:_dl_map_object_deps
3074+ fun:dl_main
3075+}
3076+
3077+{
3078+ <glibc-2.10 overreads/conditionals>
3079+ Memcheck:Value8
3080+ fun:*
3081+ fun:_dl_map_object
3082+}
3083+
3084+{
3085+ <glibc-2.10 overreads/conditionals>
3086+ Memcheck:Cond
3087+ fun:*
3088+ fun:_dl_map_object
3089+}
3090+
3091+{
3092+ <glibc-2.10 overreads/conditionals>
3093+ Memcheck:Cond
3094+ fun:_dl_map_object
3095+ fun:openaux
3096+ fun:_dl_catch_error
3097+ fun:_dl_map_object_deps
3098+ fun:dl_main
3099+}
3100+
3101+{
3102+ <glibc-2.10 overreads/conditionals>
3103+ Memcheck:Value8
3104+ fun:_dl_map_object
3105+ fun:openaux
3106+ fun:_dl_catch_error
3107+ fun:_dl_map_object_deps
3108+ fun:dl_main
3109+}
3110+
3111+{
3112+ <glibc-2.10 overreads/conditionals>
3113+ Memcheck:Cond
3114+ fun:*
3115+ fun:_dl_map_object
3116+ fun:openaux
3117+ fun:_dl_catch_error
3118+ fun:_dl_map_object_deps
3119+ fun:dl_main
3120+}
3121+
3122+{
3123+ <glibc-2.10 overreads/conditionals>
3124+ Memcheck:Value8
3125+ fun:*
3126+ fun:open_path
3127+ fun:_dl_map_object
3128+ fun:openaux
3129+ fun:_dl_catch_error
3130+ fun:_dl_map_object_deps
3131+ fun:dl_main
3132+}
3133+
3134+{
3135+ <glibc-2.10 overreads/conditionals>
3136+ Memcheck:Cond
3137+ fun:*
3138+ fun:open_path
3139+ fun:_dl_map_object
3140+ fun:openaux
3141+ fun:_dl_catch_error
3142+ fun:_dl_map_object_deps
3143+ fun:dl_main
3144+}
3145+
3146+{
3147+ <glibc-2.10 overreads/conditionals>
3148+ Memcheck:Value8
3149+ fun:_dl_map_object_from_fd
3150+ fun:_dl_map_object
3151+}
3152+
3153+{
3154+ <glibc-2.10 overreads/conditionals>
3155+ Memcheck:Cond
3156+ fun:_dl_map_object_from_fd
3157+ fun:_dl_map_object
3158+}
3159+
3160+{
3161+ <glibc-2.10 overreads/conditionals>
3162+ Memcheck:Value8
3163+ fun:*
3164+ fun:_dl_new_object
3165+ fun:_dl_map_object_from_fd
3166+ fun:_dl_map_object
3167+}
3168+
3169+{
3170+ <glibc-2.10 overreads/conditionals>
3171+ Memcheck:Value8
3172+ fun:_dl_new_object
3173+ fun:_dl_map_object_from_fd
3174+ fun:_dl_map_object
3175+}
3176+
3177+{
3178+ <glibc-2.10 overreads/conditionals>
3179+ Memcheck:Cond
3180+ fun:_dl_new_object
3181+ fun:_dl_map_object_from_fd
3182+ fun:_dl_map_object
3183+}
3184+
3185+{
3186+ <glibc-2.10 overreads/conditionals>
3187+ Memcheck:Value8
3188+ fun:*
3189+ fun:_dl_name_match_p
3190+ fun:_dl_map_object
3191+}
3192+
3193+{
3194+ <glibc-2.10 overreads/conditionals>
3195+ Memcheck:Cond
3196+ fun:*
3197+ fun:*
3198+ fun:_dl_map_object
3199+}
3200+
3201+{
3202+ <glibc-2.10 overreads/conditionals>
3203+ Memcheck:Value8
3204+ fun:*
3205+ fun:_dl_name_match_p
3206+ fun:_dl_check_map_versions
3207+ fun:_dl_check_all_versions
3208+}
3209+
3210+{
3211+ <glibc-2.10 overreads/conditionals>
3212+ Memcheck:Value8
3213+ fun:*
3214+ fun:*
3215+ fun:do_lookup_x
3216+ fun:_dl_lookup_symbol_x
3217+}
3218+
3219+{
3220+ <glibc-2.10 overreads/conditionals>
3221+ Memcheck:Cond
3222+ fun:do_lookup_x
3223+ fun:_dl_lookup_symbol_x
3224+}
3225+
3226+{
3227+ <glibc-2.10 overreads/conditionals>
3228+ Memcheck:Value8
3229+ fun:do_lookup_x
3230+ fun:_dl_lookup_symbol_x
3231+}
3232+
3233+{
3234+ <glibc-2.10 overreads/conditionals>
3235+ Memcheck:Value8
3236+ fun:*
3237+ fun:do_lookup_x
3238+ fun:_dl_lookup_symbol_x
3239+}
3240+{
3241+ <glibc-2.10 overreads/conditionals>
3242+ Memcheck:Cond
3243+ fun:*
3244+ fun:do_lookup_x
3245+ fun:_dl_lookup_symbol_x
3246+}
3247+
3248+{
3249+ <glibc-2.10 overreads/conditionals>
3250+ Memcheck:Value8
3251+ fun:_dl_name_match_p
3252+ fun:_dl_map_object
3253+ fun:dl_open_worker
3254+}
3255+{
3256+ <glibc-2.10 overreads/conditionals>
3257+ Memcheck:Cond
3258+ fun:_dl_name_match_p
3259+ fun:_dl_map_object
3260+ fun:dl_open_worker
3261+}
3262+
3263+{
3264+ <glibc-2.10 overreads/conditionals>
3265+ Memcheck:Value8
3266+ fun:*
3267+ fun:_dl_name_match_p
3268+ fun:_dl_map_object
3269+ fun:dl_open_worker
3270+}
3271+{
3272+ <glibc-2.10 overreads/conditionals>
3273+ Memcheck:Cond
3274+ fun:*
3275+ fun:_dl_name_match_p
3276+ fun:_dl_map_object
3277+ fun:dl_open_worker
3278+}
3279+
3280+{
3281+ <glibc-2.10 overreads/conditionals>
3282+ Memcheck:Value8
3283+ fun:_dl_lookup_symbol_x
3284+ fun:_dl_relocate_object
3285+}
3286+{
3287+ <glibc-2.10 overreads/conditionals>
3288+ Memcheck:Cond
3289+ fun:_dl_lookup_symbol_x
3290+ fun:_dl_relocate_object
3291+}
3292+
3293+{
3294+ <glibc-2.10 overreads/conditionals>
3295+ Memcheck:Value8
3296+ fun:*
3297+ fun:*
3298+ fun:_dl_check_map_versions
3299+}
3300+{
3301+ <glibc-2.10 overreads/conditionals>
3302+ Memcheck:Value8
3303+ fun:*
3304+ fun:_dl_check_map_versions
3305+}
3306+{
3307+ <glibc-2.10 overreads/conditionals>
3308+ Memcheck:Cond
3309+ fun:*
3310+ fun:*
3311+ fun:_dl_check_map_versions
3312+}
3313+{
3314+ <glibc-2.10 overreads/conditionals>
3315+ Memcheck:Cond
3316+ fun:*
3317+ fun:_dl_check_map_versions
3318+}
3319+{
3320+ <glibc-2.10 overreads/conditionals>
3321+ Memcheck:Value8
3322+ fun:openaux
3323+}
3324+{
3325+ <glibc-2.10 overreads/conditionals>
3326+ Memcheck:Value8
3327+ fun:_dl_name_match_p
3328+ fun:_dl_map_object
3329+}
3330+
3331+{
3332+ <glibc-2.10 overreads/conditionals>
3333+ Memcheck:Cond
3334+ fun:_dl_close_worker
3335+ fun:_dl_close
3336+ fun:_dl_catch_error
3337+ fun:dlerror_run
3338+}
3339+{
3340+ <glibc-2.10 overreads/conditionals>
3341+ Memcheck:Value8
3342+ fun:_dl_close_worker
3343+ fun:_dl_close
3344+ fun:_dl_catch_error
3345+ fun:dlerror_run
3346+}
3347+{
3348+ <glibc-2.10 overreads/conditionals>
3349+ Memcheck:Cond
3350+ fun:*
3351+ fun:_dl_close_worker
3352+ fun:_dl_close
3353+ fun:_dl_catch_error
3354+ fun:dlerror_run
3355+}
3356+{
3357+ <glibc-2.10 overreads/conditionals>
3358+ Memcheck:Value8
3359+ fun:*
3360+ fun:_dl_close_worker
3361+ fun:_dl_close
3362+ fun:_dl_catch_error
3363+ fun:dlerror_run
3364+}
3365+
3366+{
3367+ <glibc-2.10 overreads/conditionals>
3368+ Memcheck:Cond
3369+ fun:fillin_rpath
3370+ fun:_dl_init_paths
3371+ fun:dl_main
3372+}
3373+{
3374+ <glibc-2.10 overreads/conditionals>
3375+ Memcheck:Value8
3376+ fun:fillin_rpath
3377+ fun:_dl_init_paths
3378+ fun:dl_main
3379+}
3380+{
3381+ <glibc-2.10 overreads/conditionals>
3382+ Memcheck:Cond
3383+ fun:*
3384+ fun:fillin_rpath
3385+ fun:_dl_init_paths
3386+ fun:dl_main
3387+}
3388+{
3389+ <glibc-2.10 overreads/conditionals>
3390+ Memcheck:Value8
3391+ fun:*
3392+ fun:fillin_rpath
3393+ fun:_dl_init_paths
3394+ fun:dl_main
3395+}
3396+
3397+{
3398+ <glibc-2.10 overreads/conditionals>
3399+ Memcheck:Cond
3400+ fun:_dl_map_object
3401+ fun:map_doit
3402+ fun:_dl_catch_error
3403+ fun:do_preload
3404+ fun:dl_main
3405+}
3406+{
3407+ <glibc-2.10 overreads/conditionals>
3408+ Memcheck:Value8
3409+ fun:_dl_map_object
3410+ fun:map_doit
3411+ fun:_dl_catch_error
3412+ fun:do_preload
3413+ fun:dl_main
3414+}
3415+{
3416+ <glibc-2.10 overreads/conditionals>
3417+ Memcheck:Param
3418+ open(filename)
3419+ fun:open
3420+ fun:open_verify
3421+ fun:_dl_map_object
3422+ fun:map_doit
3423+ fun:_dl_catch_error
3424+ fun:do_preload
3425+ fun:dl_main
3426+}
3427+
3428+{
3429+ <glibc-2.10 overreads/conditionals>
3430+ Memcheck:Param
3431+ stat(file_name)
3432+ fun:_xstat
3433+ fun:open_path
3434+ fun:_dl_map_object
3435+ fun:openaux
3436+ fun:_dl_catch_error
3437+ fun:_dl_map_object_deps
3438+ fun:dl_main
3439+}
3440+
3441+{
3442+ <glibc-2.10 overreads/conditionals>
3443+ Memcheck:Value8
3444+ fun:_dl_catch_error
3445+ fun:_dl_map_object_deps
3446+ fun:dl_open_worker
3447+}
3448+
3449+{
3450+ <glibc-2.10 overreads/conditionals>
3451+ Memcheck:Cond
3452+ fun:*
3453+ fun:_dl_map_object_deps
3454+ fun:dl_main
3455+}
3456+{
3457+ <glibc-2.10 overreads/conditionals>
3458+ Memcheck:Value8
3459+ fun:*
3460+ fun:_dl_map_object_deps
3461+ fun:dl_main
3462+}
3463+
3464+{
3465+ <glibc-2.10 overreads/conditionals>
3466+ Memcheck:Value8
3467+ fun:*
3468+ fun:*
3469+ fun:_dl_map_object_deps
3470+ fun:dl_main
3471+}
3472+
3473+# glibc-2.10 tls issues
3474+{
3475+ <glibc-2.10 overreads/conditionals>
3476+ Memcheck:Cond
3477+ fun:*
3478+ fun:init_tls
3479+ fun:dl_main
3480+}
3481+{
3482+ <glibc-2.10 overreads/conditionals>
3483+ Memcheck:Value8
3484+ fun:*
3485+ fun:init_tls
3486+ fun:dl_main
3487+}
3488+{
3489+ <glibc-2.10 overreads/conditionals>
3490+ Memcheck:Cond
3491+ fun:*
3492+ fun:*
3493+ fun:init_tls
3494+ fun:dl_main
3495+}
3496+{
3497+ <glibc-2.10 overreads/conditionals>
3498+ Memcheck:Value8
3499+ fun:*
3500+ fun:*
3501+ fun:init_tls
3502+ fun:dl_main
3503+}
3504+
3505+{
3506+ <glibc-2.10 overreads/conditionals>
3507+ Memcheck:Cond
3508+ fun:_dl_allocate_tls_init
3509+ fun:dl_main
3510+}
3511+{
3512+ <glibc-2.10 overreads/conditionals>
3513+ Memcheck:Value8
3514+ fun:_dl_allocate_tls_init
3515+ fun:dl_main
3516+}
3517+{
3518+ <glibc-2.10 overreads/conditionals>
3519+ Memcheck:Cond
3520+ fun:*
3521+ fun:_dl_allocate_tls_init
3522+ fun:dl_main
3523+}
3524+{
3525+ <glibc-2.10 overreads/conditionals>
3526+ Memcheck:Value8
3527+ fun:*
3528+ fun:_dl_allocate_tls_init
3529+ fun:dl_main
3530+}
3531+
3532+{
3533+ <glibc-2.10 overreads/conditionals>
3534+ Memcheck:Cond
3535+ fun:__tls*
3536+ obj:*
3537+ obj:*
3538+ fun:_vgnU_freeres
3539+}
3540+
3541+{
3542+ <glibc-2.10 overreads/conditionals>
3543+ Memcheck:Param
3544+ arch_prctl(arg2)
3545+ fun:init_tls
3546+}
3547+# GLib caching tmp/home directories (glibc-2.10 variants)
3548+{
3549+ <glibc-2.10 GLIB leaks>
3550+ Memcheck:Cond
3551+ fun:*
3552+ fun:dl_open_worker
3553+ fun:*
3554+ fun:*
3555+ fun:*
3556+ fun:_dl_catch_error
3557+ fun:dlerror_run
3558+ fun:*
3559+ fun:__nss_lookup_function
3560+ fun:__nss_lookup
3561+ fun:getpwnam*
3562+}
3563+{
3564+ <glibc-2.10 GLIB leaks>
3565+ Memcheck:Value8
3566+ fun:*
3567+ fun:dl_open_worker
3568+ fun:*
3569+ fun:*
3570+ fun:*
3571+ fun:_dl_catch_error
3572+ fun:dlerror_run
3573+ fun:*
3574+ fun:__nss_lookup_function
3575+ fun:__nss_lookup
3576+ fun:getpwnam*
3577+}
3578+{
3579+ <glibc-2.10 GLIB leaks>
3580+ Memcheck:Cond
3581+ fun:dl_open_worker
3582+ fun:*
3583+ fun:*
3584+ fun:do_dlopen
3585+ fun:*
3586+ fun:dlerror_run
3587+ fun:*
3588+ fun:__nss_lookup_function
3589+ fun:__nss_lookup
3590+ fun:getpwnam*
3591+}
3592+{
3593+ <glibc-2.10 GLIB leaks>
3594+ Memcheck:Value8
3595+ fun:dl_open_worker
3596+ fun:*
3597+ fun:*
3598+ fun:do_dlopen
3599+ fun:*
3600+ fun:dlerror_run
3601+ fun:*
3602+ fun:__nss_lookup_function
3603+ fun:__nss_lookup
3604+ fun:getpwnam*
3605+}
3606+
3607+{
3608+ <glibc-2.10 GLIB leaks>
3609+ Memcheck:Value8
3610+ fun:_dl_add_to_slotinfo
3611+ fun:dl_main
3612+}
3613+{
3614+ <glibc-2.10 GLIB leaks>
3615+ Memcheck:Param
3616+ open(filename)
3617+ fun:open
3618+ fun:open_verify
3619+ fun:open_path
3620+ fun:_dl_map_object
3621+}
3622+
3623+
3624+
3625+# GModule issues with glibc-2.10
3626+{
3627+ <glibc-2.10 GLIB leaks>
3628+ Memcheck:Value8
3629+ fun:*
3630+ fun:*
3631+ fun:dlsym
3632+ fun:g_module_symbol
3633+}
3634+{
3635+ <glibc-2.10 GLIB leaks>
3636+ Memcheck:Value8
3637+ fun:g_module_*
3638+ fun:gst_plugin*
3639+}
3640+{
3641+ <glibc-2.10 GLIB leaks>
3642+ Memcheck:Value8
3643+ fun:*
3644+ fun:g_module_*
3645+ fun:gst_plugin*
3646+}
3647+
3648+{
3649+ <glibc-2.10 GLIB leaks>
3650+ Memcheck:Value8
3651+ fun:*
3652+ fun:*
3653+ fun:dlopen*
3654+ fun:g_module_open
3655+}
3656+{
3657+ <glibc-2.10 GLIB leaks>
3658+ Memcheck:Value8
3659+ fun:*
3660+ fun:*
3661+ fun:*
3662+ fun:*
3663+ fun:*
3664+ fun:*
3665+ fun:*
3666+ fun:dlsym
3667+ fun:g_module_symbol
3668+}
3669+
3670+{
3671+ <glibc-2.10 GLIB leaks>
3672+ Memcheck:Value8
3673+ fun:*
3674+ fun:*
3675+ fun:*
3676+ fun:*
3677+ fun:*
3678+ fun:dlopen*
3679+ fun:g_module_open
3680+}
3681+
3682+# Leak in GSlice
3683+{
3684+ <insert a suppression name here>
3685+ Memcheck:Value8
3686+ fun:g_parse_debug_string
3687+ fun:slice_config_init
3688+ fun:g_slice_init_nomessage
3689+ fun:_g_slice_thread_init_nomessage
3690+ fun:g_thread_init_glib
3691+}
3692+
3693+# 2.10 pthread issues
3694+{
3695+ <insert a suppression name here>
3696+ Memcheck:Value8
3697+ fun:__pthread_initialize_minimal
3698+}
3699+
3700+# glibc 2.11 conditional
3701+{
3702+ <glibc-2.11 conditional>
3703+ Memcheck:Cond
3704+ fun:_dl_relocate_object
3705+ fun:dl_main
3706+ fun:_dl_sysdep_start
3707+ fun:_dl_start
3708+ obj:/lib64/ld-2.11.so
3709+}
3710+
3711+# glibc 2.11 Leak
3712+
3713+{
3714+ <insert_a_suppression_name_here>
3715+ Memcheck:Leak
3716+ fun:*alloc
3717+ fun:dl_open_worker
3718+ fun:_dl_catch_error
3719+ fun:_dl_open
3720+ fun:dlopen_doit
3721+ fun:_dl_catch_error
3722+ fun:_dlerror_run
3723+ fun:dlopen@@GLIBC_2.2.5
3724+}
3725+
3726+{
3727+ <insert_a_suppression_name_here>
3728+ Memcheck:Leak
3729+ fun:*alloc
3730+ fun:_dl_*
3731+ fun:dl_open_worker
3732+ fun:_dl_catch_error
3733+ fun:_dl_open
3734+ fun:dlopen_doit
3735+ fun:_dl_catch_error
3736+ fun:_dlerror_run
3737+ fun:dlopen@@GLIBC_2.2.5
3738+}
3739+
3740+{
3741+ <insert_a_suppression_name_here>
3742+ Memcheck:Leak
3743+ fun:*alloc
3744+ fun:_dl_*
3745+ fun:_dl_*
3746+ fun:_dl_*
3747+ fun:dl_open_worker
3748+ fun:_dl_catch_error
3749+ fun:_dl_open
3750+ fun:dlopen_doit
3751+ fun:_dl_catch_error
3752+ fun:_dlerror_run
3753+ fun:dlopen@@GLIBC_2.2.5
3754+}
3755+
3756+{
3757+ <insert_a_suppression_name_here>
3758+ Memcheck:Leak
3759+ fun:*alloc
3760+ fun:*
3761+ fun:_dl_*
3762+ fun:openaux
3763+ fun:_dl_catch_error
3764+ fun:_dl_map_object_deps
3765+ fun:dl_open_worker
3766+ fun:_dl_catch_error
3767+ fun:_dl_open
3768+ fun:dlopen_doit
3769+ fun:_dl_catch_error
3770+ fun:_dlerror_run
3771+ fun:dlopen@@GLIBC_2.2.5
3772+}
3773+
3774+{
3775+ <insert_a_suppression_name_here>
3776+ Memcheck:Leak
3777+ fun:*alloc
3778+ fun:*
3779+ fun:_dl_map_object
3780+ fun:dl_open_worker
3781+ fun:_dl_catch_error
3782+ fun:_dl_open
3783+ fun:dlopen_doit
3784+ fun:_dl_catch_error
3785+ fun:_dlerror_run
3786+ fun:dlopen@@GLIBC_2.2.5
3787+}
3788+
3789+{
3790+ <insert_a_suppression_name_here>
3791+ Memcheck:Leak
3792+ fun:*alloc
3793+ fun:_dl_new_object
3794+ fun:_dl_map_object_from_fd
3795+ fun:_dl_map_object
3796+ fun:openaux
3797+ fun:_dl_catch_error
3798+ fun:_dl_map_object_deps
3799+ fun:dl_open_worker
3800+ fun:_dl_catch_error
3801+ fun:_dl_open
3802+ fun:dlopen_doit
3803+ fun:_dl_catch_error
3804+ fun:_dlerror_run
3805+ fun:dlopen@@GLIBC_2.2.5
3806+}
3807+
3808+{
3809+ <insert_a_suppression_name_here>
3810+ Memcheck:Leak
3811+ fun:*alloc
3812+ fun:*
3813+ fun:_dl_*
3814+ fun:_dl_*
3815+ fun:_dl_*
3816+ fun:dl_open_worker
3817+ fun:_dl_catch_error
3818+ fun:_dl_open
3819+ fun:dlopen_doit
3820+ fun:_dl_catch_error
3821+ fun:_dlerror_run
3822+ fun:dlopen@@GLIBC_2.2.5
3823+}
3824+
3825+# glib type leaks
3826+{
3827+ <insert_a_suppression_name_here>
3828+ Memcheck:Leak
3829+ fun:*alloc
3830+ ...
3831+ fun:g_type_register_static
3832+}
3833+
3834+# new registry system
3835+# all of this will only be created once when loading registry.
3836+
3837+{
3838+ <insert_a_suppression_name_here>
3839+ Memcheck:Leak
3840+ fun:*alloc
3841+ ...
3842+ fun:_priv_gst_registry_chunks_load_plugin
3843+}
3844+
3845+# system-wide tags
3846+# these tags are registered once
3847+
3848+{
3849+ <insert_a_suppression_name_here>
3850+ Memcheck:Leak
3851+ fun:*alloc
3852+ fun:*
3853+ fun:*
3854+ fun:gst_tag_register
3855+ fun:_gst_tag_initialize
3856+}
3857+
3858+# system-wide type classes that we keep referenced
3859+
3860+{
3861+ <g_type_class_ref leaks>
3862+ Memcheck:Leak
3863+ fun:*alloc
3864+ ...
3865+ fun:g_type_class_ref
3866+}
3867+
3868+# leaking cached queries which are only initialized once
3869+{
3870+ <insert_a_suppression_name_here>
3871+ Memcheck:Leak
3872+ fun:*alloc
3873+ ...
3874+ fun:_gst_query_initialize
3875+ fun:init_post
3876+}
3877+
3878+# macosx (leopard) library loader leak
3879+{
3880+ <insert_a_suppression_name_here>
3881+ Memcheck:Leak
3882+ fun:_Znwm
3883+ fun:_ZNSs4_Rep9_S_createEmmRKSaIcE
3884+ fun:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag
3885+ fun:_ZNSsC2EPKcRKSaIcE
3886+ fun:_Z41__static_initialization_and_destruction_0ii
3887+ fun:_ZN16ImageLoaderMachO18doModInitFunctionsERKN11ImageLoader11LinkContextE
3888+}
3889+
3890+# GObject type registration
3891+{
3892+ <insert_a_suppression_name_here>
3893+ Memcheck:Leak
3894+ fun:*alloc
3895+ fun:g_param_type_register_static
3896+ ...
3897+}
3898+
3899+{
3900+ <insert_a_suppression_name_here>
3901+ Memcheck:Leak
3902+ fun:*alloc
3903+ ...
3904+ fun:_g_atomic_array_copy
3905+}
3906+
3907+{
3908+ <getdelim one-time inits called from libselinux>
3909+ Memcheck:Leak
3910+ fun:*alloc
3911+ fun:getdelim
3912+ obj:*libselinux*
3913+}
3914+
3915+{
3916+ <weird one when re-reading registry>
3917+ Memcheck:Leak
3918+ fun:*alloc
3919+ ...
3920+ obj:*/sed
3921+}
3922+
3923+{
3924+ <weird one when re-reading registry>
3925+ Memcheck:Addr8
3926+ ...
3927+ obj:*/sed
3928+}
3929+
3930+# GLib 2.23 interface vtable
3931+{
3932+ <insert_a_suppression_name_here>
3933+ Memcheck:Leak
3934+ fun:*alloc
3935+ ...
3936+ fun:g_type_add_interface_static
3937+}
3938+
3939+{
3940+ <leak in dash on debian sid>
3941+ Memcheck:Leak
3942+ fun:*alloc
3943+ obj:*/dash
3944+}
3945+
3946+# libtool/gentoo fake leak
3947+# it actually runs bash and valgrind complains
3948+{
3949+ <insert_a_suppression_name_here>
3950+ Memcheck:Leak
3951+ fun:*alloc
3952+ obj:/bin/bash
3953+}
3954+
3955+{
3956+ <ignore possbly-lost leaks in the plugin scanner which doesn't clean up properly>
3957+ Memcheck:Leak
3958+ fun:*alloc
3959+ ...
3960+ fun:_gst_plugin_loader_client_run
3961+ fun:main
3962+}
3963+
3964+{
3965+ <warning with libc 2.13-2 as in Debian/unstable on amd64>
3966+ Memcheck:Cond
3967+ fun:*strcasecmp*
3968+ ...
3969+ fun:__dcigettext
3970+}
3971+
3972+{
3973+ <warning with libc 2.13-2 as in Debian/unstable on amd64>
3974+ Memcheck:Value8
3975+ fun:*strcasecmp*
3976+ ...
3977+ fun:__dcigettext
3978+}
3979+
3980+{
3981+ <GstSystemClock is a singleton and does not leak>
3982+ Memcheck:Leak
3983+ fun:malloc
3984+ ...
3985+ fun:gst_poll_new
3986+ fun:gst_poll_new_timer
3987+ fun:gst_system_clock_init
3988+}
3989+
3990+{
3991+ <glib types are singletons>
3992+ Memcheck:Leak
3993+ fun:calloc
3994+ ...
3995+ fun:gobject_init_ctor
3996+}
3997+
3998+{
3999+ <quark table is leaked on purpose if it grows too big>
4000+ Memcheck:Leak
4001+ fun:malloc
4002+ ...
4003+ fun:g_quark_from*_string
4004+}
4005+
4006+{
4007+ <timer_create suppressions for earlier valgrind versions that complain>
4008+ Memcheck:Param
4009+ timer_create(evp)
4010+ fun:timer_create@@GLIBC_2.3.3
4011+}
4012+
4013+{
4014+ closures aren't valgrind friendly (bgo#739850)
4015+ Memcheck:Leak
4016+ match-leak-kinds: possible
4017+ fun:calloc
4018+ ...
4019+ fun:g_cclosure_new
4020+}
4021+
4022+{
4023+ closures aren't valgrind friendly (bgo#739850)
4024+ Memcheck:Leak
4025+ match-leak-kinds: possible
4026+ fun:malloc
4027+ ...
4028+ fun:g_closure_add_invalidate_notifier
4029+}
4030+
4031+{
4032+ closures aren't valgrind friendly (bgo#739850)
4033+ Memcheck:Leak
4034+ match-leak-kinds: possible
4035+ fun:calloc
4036+ ...
4037+ fun:g_closure_new_simple
4038+}
4039+
4040+{
4041+ glib/giomodules2 (from libsoup.supp)
4042+ Memcheck:Leak
4043+ ...
4044+ fun:_g_io_module_get_default
4045+}
4046\ No newline at end of file
4047
4048=== modified file 'src/core/media/CMakeLists.txt'
4049--- src/core/media/CMakeLists.txt 2015-02-24 15:22:19 +0000
4050+++ src/core/media/CMakeLists.txt 2015-04-17 14:35:22 +0000
4051@@ -1,7 +1,3 @@
4052-pkg_check_modules(PC_GSTREAMER_1_0 REQUIRED gstreamer-1.0)
4053-pkg_check_modules(PC_PULSE_AUDIO REQUIRED libpulse)
4054-include_directories(${PC_GSTREAMER_1_0_INCLUDE_DIRS} ${HYBRIS_MEDIA_CFLAGS} ${PC_PULSE_AUDIO_INCLUDE_DIRS})
4055-
4056 # We compile with all symbols visible by default. For the shipping library, we strip
4057 # out all symbols that are not in core::ubuntu::media*
4058 set(symbol_map "${CMAKE_SOURCE_DIR}/symbols.map")
4059@@ -109,7 +105,7 @@
4060 gstreamer/playbin.cpp
4061
4062 player_skeleton.cpp
4063- player_implementation.cpp
4064+# player_implementation.cpp
4065 service_skeleton.cpp
4066 service_implementation.cpp
4067 track_list_skeleton.cpp
4068@@ -125,11 +121,11 @@
4069 ${DBUS_LIBRARIES}
4070 ${DBUS_CPP_LDFLAGS}
4071 ${GLog_LIBRARY}
4072- ${PC_GSTREAMER_1_0_LIBRARIES}
4073+ ${GSTREAMER_1_0_LIBRARIES}
4074 ${PROCESS_CPP_LDFLAGS}
4075 ${GIO_LIBRARIES}
4076 ${HYBRIS_MEDIA_LIBRARIES}
4077- ${PC_PULSE_AUDIO_LIBRARIES}
4078+ ${PULSE_AUDIO_LIBRARIES}
4079 )
4080
4081 include_directories(${PROJECT_SOURCE_DIR}/src/ ${HYBRIS_MEDIA_CFLAGS})
4082@@ -150,7 +146,7 @@
4083 ${DBUS_LIBRARIES}
4084 ${DBUS_CPP_LDFLAGS}
4085 ${GLog_LIBRARY}
4086- ${PC_GSTREAMER_1_0_LIBRARIES}
4087+ ${GSTREAMER_1_0_LIBRARIES}
4088 ${HYBRIS_MEDIA_LIBRARIES}
4089 )
4090
4091
4092=== modified file 'src/core/media/gstreamer/engine.cpp'
4093--- src/core/media/gstreamer/engine.cpp 2015-03-11 16:17:23 +0000
4094+++ src/core/media/gstreamer/engine.cpp 2015-04-17 14:35:22 +0000
4095@@ -33,18 +33,29 @@
4096
4097 namespace gstreamer
4098 {
4099-struct Init
4100+struct GlobalState
4101 {
4102- Init()
4103+ GlobalState()
4104 {
4105 gst_init(nullptr, nullptr);
4106 }
4107
4108- ~Init()
4109+ ~GlobalState()
4110 {
4111 gst_deinit();
4112 }
4113-} init;
4114+
4115+ bool is_initialized() const
4116+ {
4117+ return true;
4118+ }
4119+};
4120+
4121+bool init()
4122+{
4123+ static const GlobalState state;
4124+ return state.is_initialized();
4125+}
4126 }
4127
4128 struct gstreamer::Engine::Private
4129@@ -181,7 +192,8 @@
4130 }
4131
4132 Private()
4133- : meta_data_extractor(new gstreamer::MetaDataExtractor()),
4134+ : ensure_gstreamer_is_initialized(init()),
4135+ meta_data_extractor(new gstreamer::MetaDataExtractor()),
4136 volume(media::Engine::Volume(1.)),
4137 orientation(media::Player::Orientation::rotate0),
4138 is_video_source(false),
4139@@ -270,6 +282,8 @@
4140 {
4141 }
4142
4143+ // Make sure that gstreamer setup procedures are called.
4144+ bool ensure_gstreamer_is_initialized;
4145 // Ensure the playbin is the last item destroyed
4146 // otherwise properties could try to access a dead playbin object
4147 gstreamer::Playbin playbin;
4148@@ -312,6 +326,7 @@
4149
4150 gstreamer::Engine::Engine() : d(new Private{})
4151 {
4152+ gstreamer::init();
4153 cout << "Creating a new Engine instance in " << __PRETTY_FUNCTION__ << endl;
4154 d->state = media::Engine::State::ready;
4155 }
4156
4157=== modified file 'src/core/media/gstreamer/meta_data_extractor.h'
4158--- src/core/media/gstreamer/meta_data_extractor.h 2014-10-14 20:05:20 +0000
4159+++ src/core/media/gstreamer/meta_data_extractor.h 2015-04-17 14:35:22 +0000
4160@@ -147,7 +147,7 @@
4161 MetaDataExtractor()
4162 : pipe(gst_pipeline_new("meta_data_extractor_pipeline")),
4163 decoder(gst_element_factory_make ("uridecodebin", NULL)),
4164- bus(GST_ELEMENT_BUS(pipe))
4165+ bus(gst_element_get_bus(pipe))
4166 {
4167 gst_bin_add(GST_BIN(pipe), decoder);
4168
4169@@ -157,10 +157,48 @@
4170 g_signal_connect (decoder, "pad-added", G_CALLBACK (on_new_pad), sink);
4171 }
4172
4173+ MetaDataExtractor(const MetaDataExtractor&) = delete;
4174+ MetaDataExtractor(MetaDataExtractor&&) = delete;
4175+
4176 ~MetaDataExtractor()
4177 {
4178- gst_element_set_state(pipe, GST_STATE_NULL);
4179- // gst_object_unref(pipe);
4180+ set_state_and_wait(GST_STATE_NULL);
4181+ gst_object_unref(pipe);
4182+ }
4183+
4184+ MetaDataExtractor& operator=(const MetaDataExtractor&) = delete;
4185+ MetaDataExtractor& operator=(const MetaDataExtractor&&) = delete;
4186+
4187+ bool set_state_and_wait(GstState new_state)
4188+ {
4189+ static const std::chrono::nanoseconds state_change_timeout
4190+ {
4191+ // We choose a quite high value here as tests are run under valgrind
4192+ // and gstreamer pipeline setup/state changes take longer in that scenario.
4193+ // The value does not negatively impact runtime performance.
4194+ std::chrono::milliseconds{5000}
4195+ };
4196+
4197+ auto ret = gst_element_set_state(pipe, new_state);
4198+
4199+ bool result = false; GstState current, pending;
4200+ switch(ret)
4201+ {
4202+ case GST_STATE_CHANGE_FAILURE:
4203+ result = false; break;
4204+ case GST_STATE_CHANGE_NO_PREROLL:
4205+ case GST_STATE_CHANGE_SUCCESS:
4206+ result = true; break;
4207+ case GST_STATE_CHANGE_ASYNC:
4208+ result = GST_STATE_CHANGE_SUCCESS == gst_element_get_state(
4209+ pipe,
4210+ &current,
4211+ &pending,
4212+ state_change_timeout.count());
4213+ break;
4214+ }
4215+
4216+ return result;
4217 }
4218
4219 core::ubuntu::media::Track::MetaData meta_data_for_track_with_uri(const core::ubuntu::media::Track::UriType& uri)
4220@@ -189,15 +227,18 @@
4221 };
4222
4223 g_object_set(decoder, "uri", uri.c_str(), NULL);
4224- gst_element_set_state(pipe, GST_STATE_PAUSED);
4225+ if (not set_state_and_wait(GST_STATE_PAUSED))
4226+ {
4227+ // TODO: This error condition should be handled and at least reported here.
4228+ }
4229
4230 if (std::future_status::ready != future.wait_for(std::chrono::seconds(2)))
4231 {
4232- gst_element_set_state(pipe, GST_STATE_NULL);
4233+ set_state_and_wait(GST_STATE_NULL);
4234 throw std::runtime_error("Problem extracting meta data for track");
4235 } else
4236 {
4237- gst_element_set_state(pipe, GST_STATE_NULL);
4238+ set_state_and_wait(GST_STATE_NULL);
4239 }
4240
4241 return future.get();
4242
4243=== modified file 'src/core/media/gstreamer/playbin.cpp'
4244--- src/core/media/gstreamer/playbin.cpp 2015-03-11 16:17:23 +0000
4245+++ src/core/media/gstreamer/playbin.cpp 2015-04-17 14:35:22 +0000
4246@@ -127,6 +127,7 @@
4247
4248 gstreamer::Playbin::~Playbin()
4249 {
4250+ std::cout << pipeline << std::endl;
4251 if (pipeline)
4252 gst_object_unref(pipeline);
4253 }
4254
4255=== modified file 'src/core/media/mpris/player.h'
4256--- src/core/media/mpris/player.h 2015-03-11 16:17:23 +0000
4257+++ src/core/media/mpris/player.h 2015-04-17 14:35:22 +0000
4258@@ -173,6 +173,32 @@
4259 DBUS_CPP_READABLE_PROPERTY_DEF(CanControl, Player, bool)
4260 };
4261
4262+ // Default values for properties
4263+ struct Defaults
4264+ {
4265+ Properties::CanPlay::ValueType can_play{true};
4266+ Properties::CanPause::ValueType can_pause{true};
4267+ Properties::CanSeek::ValueType can_seek{true};
4268+ Properties::CanControl::ValueType can_control{true};
4269+ Properties::CanGoNext::ValueType can_go_next{true};
4270+ Properties::CanGoPrevious::ValueType can_go_previous{true};
4271+ Properties::IsVideoSource::ValueType is_video_source{false};
4272+ Properties::IsAudioSource::ValueType is_audio_source{true};
4273+ Properties::PlaybackStatus::ValueType playback_status{PlaybackStatus::stopped};
4274+ Properties::TypedPlaybackStatus::ValueType typed_playback_status{core::ubuntu::media::Player::PlaybackStatus::null};
4275+ Properties::LoopStatus::ValueType loop_status{LoopStatus::none};
4276+ Properties::TypedLoopStatus::ValueType typed_loop_status{core::ubuntu::media::Player::LoopStatus::none};
4277+ Properties::PlaybackRate::ValueType playback_rate{1.f};
4278+ Properties::Shuffle::ValueType shuffle{false};
4279+ Properties::TypedMetaData::ValueType typed_meta_data{};
4280+ Properties::Volume::ValueType volume{0.f};
4281+ Properties::Position::ValueType position{0};
4282+ Properties::Duration::ValueType duration{0};
4283+ Properties::MinimumRate::ValueType minimum_rate{1.f};
4284+ Properties::MaximumRate::ValueType maximum_rate{1.f};
4285+ Properties::Orientation::ValueType orientation{core::ubuntu::media::Player::Orientation::rotate0};
4286+ };
4287+
4288 // Convenience struct to create a skeleton implementation for org.mpris.MediaPlayer2.Player
4289 struct Skeleton
4290 {
4291@@ -188,32 +214,8 @@
4292 core::dbus::Bus::Ptr bus;
4293 // The dbus object that should implement org.mpris.MediaPlayer2
4294 core::dbus::Object::Ptr object;
4295-
4296 // Default values for properties
4297- struct Defaults
4298- {
4299- Properties::CanPlay::ValueType can_play{true};
4300- Properties::CanPause::ValueType can_pause{true};
4301- Properties::CanSeek::ValueType can_seek{true};
4302- Properties::CanControl::ValueType can_control{true};
4303- Properties::CanGoNext::ValueType can_go_next{true};
4304- Properties::CanGoPrevious::ValueType can_go_previous{true};
4305- Properties::IsVideoSource::ValueType is_video_source{false};
4306- Properties::IsAudioSource::ValueType is_audio_source{true};
4307- Properties::PlaybackStatus::ValueType playback_status{PlaybackStatus::stopped};
4308- Properties::TypedPlaybackStatus::ValueType typed_playback_status{core::ubuntu::media::Player::PlaybackStatus::null};
4309- Properties::LoopStatus::ValueType loop_status{LoopStatus::none};
4310- Properties::TypedLoopStatus::ValueType typed_loop_status{core::ubuntu::media::Player::LoopStatus::none};
4311- Properties::PlaybackRate::ValueType playback_rate{1.f};
4312- Properties::Shuffle::ValueType shuffle{false};
4313- Properties::TypedMetaData::ValueType typed_meta_data{};
4314- Properties::Volume::ValueType volume{0.f};
4315- Properties::Position::ValueType position{0};
4316- Properties::Duration::ValueType duration{0};
4317- Properties::MinimumRate::ValueType minimum_rate{1.f};
4318- Properties::MaximumRate::ValueType maximum_rate{1.f};
4319- Properties::Orientation::ValueType orientation{core::ubuntu::media::Player::Orientation::rotate0};
4320- } defaults;
4321+ Defaults defaults;
4322 };
4323
4324 Skeleton(const Configuration& configuration)
4325@@ -278,35 +280,84 @@
4326 properties.maximum_playback_rate->set(configuration.defaults.maximum_rate);
4327
4328 // Make sure the Orientation Property gets sent over DBus to the client
4329+ properties.can_play->changed().connect([this](bool value)
4330+ {
4331+ on_property_value_changed<Properties::CanPlay>(value);
4332+ });
4333+ properties.can_pause->changed().connect([this](bool value)
4334+ {
4335+ on_property_value_changed<Properties::CanPause>(value);
4336+ });
4337+ properties.can_seek->changed().connect([this](bool value)
4338+ {
4339+ on_property_value_changed<Properties::CanSeek>(value);
4340+ });
4341+ properties.can_control->changed().connect([this](bool value)
4342+ {
4343+ on_property_value_changed<Properties::CanControl>(value);
4344+ });
4345+ properties.can_go_next->changed().connect([this](bool value)
4346+ {
4347+ on_property_value_changed<Properties::CanGoNext>(value);
4348+ });
4349+ properties.can_go_previous->changed().connect([this](bool value)
4350+ {
4351+ on_property_value_changed<Properties::CanGoPrevious>(value);
4352+ });
4353+ properties.is_video_source->changed().connect([this](bool value)
4354+ {
4355+ on_property_value_changed<Properties::IsVideoSource>(value);
4356+ });
4357+ properties.is_audio_source->changed().connect([this](bool value)
4358+ {
4359+ on_property_value_changed<Properties::IsAudioSource>(value);
4360+ });
4361 properties.orientation->changed().connect([this](const core::ubuntu::media::Player::Orientation& o)
4362 {
4363 on_property_value_changed<Properties::Orientation>(o);
4364 });
4365-
4366 properties.position->changed().connect([this](std::int64_t position)
4367 {
4368 on_property_value_changed<Properties::Position>(position);
4369 });
4370-
4371 properties.duration->changed().connect([this](std::int64_t duration)
4372 {
4373 on_property_value_changed<Properties::Duration>(duration);
4374 });
4375-
4376 properties.playback_status->changed().connect([this](const std::string& status)
4377 {
4378 on_property_value_changed<Properties::PlaybackStatus>(status);
4379 });
4380-
4381 properties.loop_status->changed().connect([this](const std::string& status)
4382 {
4383 on_property_value_changed<Properties::LoopStatus>(status);
4384 });
4385+ properties.audio_stream_role->changed().connect([this](core::ubuntu::media::Player::AudioStreamRole role)
4386+ {
4387+ on_property_value_changed<Properties::AudioStreamRole>(role);
4388+ });
4389+ properties.lifetime->changed().connect([this](core::ubuntu::media::Player::Lifetime lt)
4390+ {
4391+ on_property_value_changed<Properties::Lifetime>(lt);
4392+ });
4393+ properties.playback_rate->changed().connect([this](double rate)
4394+ {
4395+ on_property_value_changed<Properties::PlaybackRate>(rate);
4396+ });
4397+ properties.minimum_playback_rate->changed().connect([this](double rate)
4398+ {
4399+ on_property_value_changed<Properties::MinimumRate>(rate);
4400+ });
4401+ properties.maximum_playback_rate->changed().connect([this](double rate)
4402+ {
4403+ on_property_value_changed<Properties::MaximumRate>(rate);
4404+ });
4405 }
4406
4407 template<typename Property>
4408 void on_property_value_changed(const typename Property::ValueType& value)
4409 {
4410+ std::cout << __PRETTY_FUNCTION__ << std::endl;
4411 Dictionary dict; dict[Property::name()] = dbus::types::Variant::encode(value);
4412
4413 signals.properties_changed->emit(std::make_tuple(
4414
4415=== added file 'src/core/media/player_base.h'
4416--- src/core/media/player_base.h 1970-01-01 00:00:00 +0000
4417+++ src/core/media/player_base.h 2015-04-17 14:35:22 +0000
4418@@ -0,0 +1,332 @@
4419+/*
4420+ * Copyright © 2013-2015 Canonical Ltd.
4421+ *
4422+ * This program is free software: you can redistribute it and/or modify it
4423+ * under the terms of the GNU Lesser General Public License version 3,
4424+ * as published by the Free Software Foundation.
4425+ *
4426+ * This program is distributed in the hope that it will be useful,
4427+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4428+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4429+ * GNU Lesser General Public License for more details.
4430+ *
4431+ * You should have received a copy of the GNU Lesser General Public License
4432+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4433+ *
4434+ * Authored by: Thomas Voß <thomas.voss@canonical.com>
4435+ */
4436+
4437+#ifndef CORE_UBUNTU_MEDIA_PLAYER_BASE_H_
4438+#define CORE_UBUNTU_MEDIA_PLAYER_BASE_H_
4439+
4440+#include <core/media/player.h>
4441+
4442+namespace core
4443+{
4444+namespace ubuntu
4445+{
4446+namespace media
4447+{
4448+// PlayerBase is a helper class that helps with testing.
4449+class PlayerBase : public Player
4450+{
4451+public:
4452+ // Empty on purpose
4453+ struct Configuration {};
4454+
4455+ PlayerBase(const Configuration&) {}
4456+
4457+ // All properties go here
4458+ const core::Property<Lifetime>& lifetime() const
4459+ {
4460+ return properties.lifetime;
4461+ }
4462+
4463+ core::Property<Lifetime>& lifetime()
4464+ {
4465+ return properties.lifetime;
4466+ }
4467+
4468+ const core::Property<bool>& can_play() const
4469+ {
4470+ return properties.can_play;
4471+ }
4472+
4473+ const core::Property<bool>& can_pause() const
4474+ {
4475+ return properties.can_pause;
4476+ }
4477+
4478+ const core::Property<bool>& can_seek() const
4479+ {
4480+ return properties.can_seek;
4481+ }
4482+
4483+ const core::Property<bool>& can_go_previous() const
4484+ {
4485+ return properties.can_go_previous;
4486+ }
4487+
4488+ const core::Property<bool>& can_go_next() const
4489+ {
4490+ return properties.can_go_next;
4491+ }
4492+
4493+ const core::Property<bool>& is_video_source() const
4494+ {
4495+ return properties.is_video_source;
4496+ }
4497+
4498+ const core::Property<bool>& is_audio_source() const
4499+ {
4500+ return properties.is_audio_source;
4501+ }
4502+
4503+ const core::Property<core::ubuntu::media::Player::PlaybackStatus>& playback_status() const
4504+ {
4505+ return properties.playback_status;
4506+ }
4507+
4508+ const core::Property<core::ubuntu::media::Player::LoopStatus>& loop_status() const
4509+ {
4510+ return properties.loop_status;
4511+ }
4512+
4513+ const core::Property<core::ubuntu::media::Player::PlaybackRate>& playback_rate() const
4514+ {
4515+ return properties.playback_rate;
4516+ }
4517+
4518+ const core::Property<bool>& is_shuffle() const
4519+ {
4520+ return properties.is_shuffle;
4521+ }
4522+
4523+ const core::Property<core::ubuntu::media::Track::MetaData>& meta_data_for_current_track() const
4524+ {
4525+ return properties.meta_data_for_current_track;
4526+ }
4527+
4528+ const core::Property<core::ubuntu::media::Player::Volume>& volume() const
4529+ {
4530+ return properties.volume;
4531+ }
4532+
4533+ const core::Property<core::ubuntu::media::Player::PlaybackRate>& minimum_playback_rate() const
4534+ {
4535+ return properties.minimum_playback_rate;
4536+ }
4537+
4538+ const core::Property<core::ubuntu::media::Player::PlaybackRate>& maximum_playback_rate() const
4539+ {
4540+ return properties.maximum_playback_rate;
4541+ }
4542+
4543+ const core::Property<int64_t>& position() const
4544+ {
4545+ return properties.position;
4546+ }
4547+
4548+ const core::Property<int64_t>& duration() const
4549+ {
4550+ return properties.duration;
4551+ }
4552+
4553+ const core::Property<core::ubuntu::media::Player::AudioStreamRole>& audio_stream_role() const
4554+ {
4555+ return properties.audio_stream_role;
4556+ }
4557+
4558+ const core::Property<core::ubuntu::media::Player::Orientation>& orientation() const
4559+ {
4560+ return properties.orientation;
4561+ }
4562+
4563+ core::Property<core::ubuntu::media::Player::LoopStatus>& loop_status()
4564+ {
4565+ return properties.loop_status;
4566+ }
4567+
4568+ core::Property<core::ubuntu::media::Player::PlaybackRate>& playback_rate()
4569+ {
4570+ return properties.playback_rate;
4571+ }
4572+
4573+ core::Property<bool>& is_shuffle()
4574+ {
4575+ return properties.is_shuffle;
4576+ }
4577+
4578+ core::Property<core::ubuntu::media::Player::Volume>& volume()
4579+ {
4580+ return properties.volume;
4581+ }
4582+
4583+ core::Property<core::ubuntu::media::Player::AudioStreamRole>& audio_stream_role()
4584+ {
4585+ return properties.audio_stream_role;
4586+ }
4587+
4588+ const core::Signal<int64_t>& seeked_to() const
4589+ {
4590+ return sigs.seeked_to;
4591+ }
4592+
4593+ const core::Signal<void>& end_of_stream() const
4594+ {
4595+ return sigs.end_of_stream;
4596+ }
4597+
4598+ const core::Signal<void>& about_to_finish() const
4599+ {
4600+ return sigs.about_to_finish;
4601+ }
4602+
4603+ core::Signal<core::ubuntu::media::Player::PlaybackStatus>& playback_status_changed()
4604+ {
4605+ return sigs.playback_status_changed;
4606+ }
4607+
4608+ const core::Signal<core::ubuntu::media::video::Dimensions>& video_dimension_changed() const
4609+ {
4610+ return sigs.video_dimension_changed;
4611+ }
4612+
4613+ core::Property<core::ubuntu::media::Player::PlaybackStatus>& playback_status()
4614+ {
4615+ return properties.playback_status;
4616+ }
4617+
4618+ core::Property<bool>& can_play()
4619+ {
4620+ return properties.can_play;
4621+ }
4622+
4623+ core::Property<bool>& can_pause()
4624+ {
4625+ return properties.can_pause;
4626+ }
4627+
4628+ core::Property<bool>& can_seek()
4629+ {
4630+ return properties.can_seek;
4631+ }
4632+
4633+ core::Property<bool>& can_go_previous()
4634+ {
4635+ return properties.can_go_previous;
4636+ }
4637+
4638+ core::Property<bool>& can_go_next()
4639+ {
4640+ return properties.can_go_next;
4641+ }
4642+
4643+ core::Property<bool>& is_video_source()
4644+ {
4645+ return properties.is_video_source;
4646+ }
4647+
4648+ core::Property<bool>& is_audio_source()
4649+ {
4650+ return properties.is_audio_source;
4651+ }
4652+
4653+ core::Property<core::ubuntu::media::Track::MetaData>& meta_data_for_current_track()
4654+ {
4655+ return properties.meta_data_for_current_track;
4656+ }
4657+
4658+ core::Property<core::ubuntu::media::Player::PlaybackRate>& minimum_playback_rate()
4659+ {
4660+ return properties.minimum_playback_rate;
4661+ }
4662+
4663+ core::Property<core::ubuntu::media::Player::PlaybackRate>& maximum_playback_rate()
4664+ {
4665+ return properties.maximum_playback_rate;
4666+ }
4667+
4668+ core::Property<int64_t>& position()
4669+ {
4670+ return properties.position;
4671+ }
4672+
4673+ core::Property<int64_t>& duration()
4674+ {
4675+ return properties.duration;
4676+ }
4677+
4678+ core::Property<core::ubuntu::media::Player::Orientation>& orientation()
4679+ {
4680+ return properties.orientation;
4681+ }
4682+
4683+ core::Signal<int64_t>& seeked_to()
4684+ {
4685+ return sigs.seeked_to;
4686+ }
4687+
4688+ core::Signal<void>& end_of_stream()
4689+ {
4690+ return sigs.end_of_stream;
4691+ }
4692+
4693+ core::Signal<core::ubuntu::media::video::Dimensions>& video_dimension_changed()
4694+ {
4695+ return sigs.video_dimension_changed;
4696+ }
4697+
4698+ const core::Signal<Error>& error() const
4699+ {
4700+ return sigs.error;
4701+ }
4702+
4703+ core::Signal<Error>& error()
4704+ {
4705+ return sigs.error;
4706+ }
4707+
4708+ core::Signal<void>& about_to_finish()
4709+ {
4710+ return sigs.about_to_finish;
4711+ }
4712+
4713+ struct
4714+ {
4715+ core::Property<Lifetime> lifetime;
4716+ core::Property<bool> can_play;
4717+ core::Property<bool> can_pause;
4718+ core::Property<bool> can_seek;
4719+ core::Property<bool> can_go_previous;
4720+ core::Property<bool> can_go_next;
4721+ core::Property<bool> is_video_source;
4722+ core::Property<bool> is_audio_source;
4723+ core::Property<PlaybackStatus> playback_status;
4724+ core::Property<LoopStatus> loop_status;
4725+ core::Property<PlaybackRate> playback_rate;
4726+ core::Property<bool> is_shuffle;
4727+ core::Property<core::ubuntu::media::Track::MetaData> meta_data_for_current_track;
4728+ core::Property<Volume> volume;
4729+ core::Property<PlaybackRate> minimum_playback_rate;
4730+ core::Property<PlaybackRate> maximum_playback_rate;
4731+ core::Property<int64_t> position;
4732+ core::Property<int64_t> duration;
4733+ core::Property<AudioStreamRole> audio_stream_role;
4734+ core::Property<Orientation> orientation;
4735+ } properties;
4736+
4737+ struct
4738+ {
4739+ core::Signal<int64_t> seeked_to;
4740+ core::Signal<void> end_of_stream;
4741+ core::Signal<PlaybackStatus> playback_status_changed;
4742+ core::Signal<core::ubuntu::media::video::Dimensions> video_dimension_changed;
4743+ core::Signal<Error> error;
4744+ core::Signal<void> about_to_finish;
4745+ } sigs;
4746+};
4747+}
4748+}
4749+}
4750+#endif // CORE_UBUNTU_MEDIA_PLAYER_BASE_H_
4751
4752=== modified file 'src/core/media/player_implementation.cpp'
4753--- src/core/media/player_implementation.cpp 2015-04-17 14:35:22 +0000
4754+++ src/core/media/player_implementation.cpp 2015-04-17 14:35:22 +0000
4755@@ -36,8 +36,6 @@
4756 namespace media = core::ubuntu::media;
4757 namespace dbus = core::dbus;
4758
4759-using namespace std;
4760-
4761 template<typename Parent>
4762 struct media::PlayerImplementation<Parent>::Private :
4763 public std::enable_shared_from_this<Private>
4764@@ -204,7 +202,7 @@
4765
4766 void clear_wakelock(const wakelock_clear_t &wakelock)
4767 {
4768- cout << __PRETTY_FUNCTION__ << endl;
4769+ std::cout << __PRETTY_FUNCTION__ << std::endl;
4770 try
4771 {
4772 switch (wakelock)
4773@@ -229,7 +227,7 @@
4774 break;
4775 case wakelock_clear_t::WAKELOCK_CLEAR_INVALID:
4776 default:
4777- cerr << "Can't clear invalid wakelock type" << endl;
4778+ std::cerr << "Can't clear invalid wakelock type" << std::endl;
4779 }
4780 }
4781 catch(const std::exception& e)
4782@@ -274,11 +272,6 @@
4783 };
4784 }
4785
4786- void on_client_died()
4787- {
4788- config.engine->reset();
4789- }
4790-
4791 // Our link back to our parent.
4792 media::PlayerImplementation<Parent>* parent;
4793 // We just store the parameters passed on construction.
4794@@ -420,11 +413,11 @@
4795 return;
4796
4797 static const std::chrono::milliseconds timeout{1000};
4798- media::timeout(timeout.count(), true, [wp]()
4799+
4800+ media::timeout(timeout.count(), true, [](const std::shared_ptr<media::Engine>& engine)
4801 {
4802- if (auto sp = wp.lock())
4803- sp->on_client_died();
4804- });
4805+ engine->reset();
4806+ }, sp->config.engine);
4807 }
4808 });
4809 }
4810@@ -538,8 +531,3 @@
4811 {
4812 Parent::playback_status_changed()(status);
4813 }
4814-
4815-#include <core/media/player_skeleton.h>
4816-
4817-// For linking purposes, we have to make sure that we have all symbols included within the dso.
4818-template class media::PlayerImplementation<media::PlayerSkeleton>;
4819
4820=== modified file 'src/core/media/player_implementation.h'
4821--- src/core/media/player_implementation.h 2015-04-17 14:35:22 +0000
4822+++ src/core/media/player_implementation.h 2015-04-17 14:35:22 +0000
4823@@ -84,5 +84,8 @@
4824 }
4825 }
4826 }
4827+
4828+#include "player_implementation.cpp"
4829+
4830 #endif // CORE_UBUNTU_MEDIA_PLAYER_IMPLEMENTATION_H_
4831
4832
4833=== modified file 'src/core/media/player_skeleton.cpp'
4834--- src/core/media/player_skeleton.cpp 2015-03-11 16:17:23 +0000
4835+++ src/core/media/player_skeleton.cpp 2015-04-17 14:35:22 +0000
4836@@ -23,7 +23,7 @@
4837 #include "player_skeleton.h"
4838 #include "player_traits.h"
4839 #include "property_stub.h"
4840-#include "the_session_bus.h"
4841+
4842 #include "xesam.h"
4843
4844 #include "apparmor/ubuntu.h"
4845@@ -54,7 +54,7 @@
4846 object(session),
4847 request_context_resolver{request_context_resolver},
4848 request_authenticator{request_authenticator},
4849- skeleton{mpris::Player::Skeleton::Configuration{bus, session, mpris::Player::Skeleton::Configuration::Defaults{}}},
4850+ skeleton{mpris::Player::Skeleton::Configuration{bus, session, mpris::Player::Defaults{}}},
4851 signals
4852 {
4853 skeleton.signals.seeked_to,
4854@@ -179,10 +179,16 @@
4855 Track::UriType uri;
4856 in->reader() >> uri;
4857
4858- auto result = request_authenticator->authenticate_open_uri_request(context, uri);
4859-
4860 auto reply = dbus::Message::make_method_return(in);
4861- reply->writer() << (std::get<0>(result) ? impl->open_uri(uri) : false);
4862+
4863+ try
4864+ {
4865+ auto result = request_authenticator->authenticate_open_uri_request(context, uri);
4866+ reply->writer() << (std::get<0>(result) ? impl->open_uri(uri) : false);
4867+ } catch(...)
4868+ {
4869+ reply->writer() << false;
4870+ }
4871
4872 bus->send(reply);
4873 });
4874@@ -197,9 +203,16 @@
4875
4876 in->reader() >> uri >> headers;
4877
4878- auto result = request_authenticator->authenticate_open_uri_request(context, uri);
4879 auto reply = dbus::Message::make_method_return(in);
4880- reply->writer() << (std::get<0>(result) ? impl->open_uri(uri, headers) : false);
4881+
4882+ try
4883+ {
4884+ auto result = request_authenticator->authenticate_open_uri_request(context, uri);
4885+ reply->writer() << (std::get<0>(result) ? impl->open_uri(uri, headers) : false);
4886+ } catch(...)
4887+ {
4888+ reply->writer() << false;
4889+ }
4890
4891 bus->send(reply);
4892 });
4893
4894=== modified file 'src/core/media/player_stub.cpp'
4895--- src/core/media/player_stub.cpp 2015-03-16 14:54:47 +0000
4896+++ src/core/media/player_stub.cpp 2015-04-17 14:35:22 +0000
4897@@ -42,45 +42,41 @@
4898
4899 struct media::PlayerStub::Private
4900 {
4901- Private(const std::shared_ptr<Service>& parent,
4902- const std::shared_ptr<core::dbus::Object>& object
4903- ) : parent(parent),
4904- object(object),
4905- key(object->invoke_method_synchronously<mpris::Player::Key, media::Player::PlayerKey>().value()),
4906- sink_factory(media::video::make_platform_default_sink_factory(key)),
4907+ Private(const media::PlayerStub::Configuration& config)
4908+ : configuration(config),
4909 properties
4910 {
4911 // Link the properties from the server side to the client side over the bus
4912- object->get_property<mpris::Player::Properties::CanPlay>(),
4913- object->get_property<mpris::Player::Properties::CanPause>(),
4914- object->get_property<mpris::Player::Properties::CanSeek>(),
4915- object->get_property<mpris::Player::Properties::CanControl>(),
4916- object->get_property<mpris::Player::Properties::CanGoNext>(),
4917- object->get_property<mpris::Player::Properties::CanGoPrevious>(),
4918- object->get_property<mpris::Player::Properties::IsVideoSource>(),
4919- object->get_property<mpris::Player::Properties::IsAudioSource>(),
4920- object->get_property<mpris::Player::Properties::TypedPlaybackStatus>(),
4921- object->get_property<mpris::Player::Properties::TypedLoopStatus>(),
4922- object->get_property<mpris::Player::Properties::PlaybackRate>(),
4923- object->get_property<mpris::Player::Properties::Shuffle>(),
4924- object->get_property<mpris::Player::Properties::TypedMetaData>(),
4925- object->get_property<mpris::Player::Properties::Volume>(),
4926- object->get_property<mpris::Player::Properties::Position>(),
4927- object->get_property<mpris::Player::Properties::Duration>(),
4928- object->get_property<mpris::Player::Properties::AudioStreamRole>(),
4929- object->get_property<mpris::Player::Properties::Orientation>(),
4930- object->get_property<mpris::Player::Properties::Lifetime>(),
4931- object->get_property<mpris::Player::Properties::MinimumRate>(),
4932- object->get_property<mpris::Player::Properties::MaximumRate>()
4933+ configuration.object->get_property<mpris::Player::Properties::CanPlay>(),
4934+ configuration.object->get_property<mpris::Player::Properties::CanPause>(),
4935+ configuration.object->get_property<mpris::Player::Properties::CanSeek>(),
4936+ configuration.object->get_property<mpris::Player::Properties::CanControl>(),
4937+ configuration.object->get_property<mpris::Player::Properties::CanGoNext>(),
4938+ configuration.object->get_property<mpris::Player::Properties::CanGoPrevious>(),
4939+ configuration.object->get_property<mpris::Player::Properties::IsVideoSource>(),
4940+ configuration.object->get_property<mpris::Player::Properties::IsAudioSource>(),
4941+ configuration.object->get_property<mpris::Player::Properties::TypedPlaybackStatus>(),
4942+ configuration.object->get_property<mpris::Player::Properties::TypedLoopStatus>(),
4943+ configuration.object->get_property<mpris::Player::Properties::PlaybackRate>(),
4944+ configuration.object->get_property<mpris::Player::Properties::Shuffle>(),
4945+ configuration.object->get_property<mpris::Player::Properties::TypedMetaData>(),
4946+ configuration.object->get_property<mpris::Player::Properties::Volume>(),
4947+ configuration.object->get_property<mpris::Player::Properties::Position>(),
4948+ configuration.object->get_property<mpris::Player::Properties::Duration>(),
4949+ configuration.object->get_property<mpris::Player::Properties::AudioStreamRole>(),
4950+ configuration.object->get_property<mpris::Player::Properties::Orientation>(),
4951+ configuration.object->get_property<mpris::Player::Properties::Lifetime>(),
4952+ configuration.object->get_property<mpris::Player::Properties::MinimumRate>(),
4953+ configuration.object->get_property<mpris::Player::Properties::MaximumRate>()
4954 },
4955 signals
4956 {
4957- object->get_signal<mpris::Player::Signals::Seeked>(),
4958- object->get_signal<mpris::Player::Signals::AboutToFinish>(),
4959- object->get_signal<mpris::Player::Signals::EndOfStream>(),
4960- object->get_signal<mpris::Player::Signals::PlaybackStatusChanged>(),
4961- object->get_signal<mpris::Player::Signals::VideoDimensionChanged>(),
4962- object->get_signal<mpris::Player::Signals::Error>()
4963+ configuration.object->get_signal<mpris::Player::Signals::Seeked>(),
4964+ configuration.object->get_signal<mpris::Player::Signals::AboutToFinish>(),
4965+ configuration.object->get_signal<mpris::Player::Signals::EndOfStream>(),
4966+ configuration.object->get_signal<mpris::Player::Signals::PlaybackStatusChanged>(),
4967+ configuration.object->get_signal<mpris::Player::Signals::VideoDimensionChanged>(),
4968+ configuration.object->get_signal<mpris::Player::Signals::Error>()
4969 }
4970 {
4971 }
4972@@ -89,11 +85,9 @@
4973 {
4974 }
4975
4976- std::shared_ptr<Service> parent;
4977+ media::PlayerStub::Configuration configuration;
4978 std::shared_ptr<TrackList> track_list;
4979- dbus::Object::Ptr object;
4980- media::Player::PlayerKey key;
4981- media::video::SinkFactory sink_factory;
4982+
4983 struct
4984 {
4985 std::shared_ptr<core::dbus::Property<mpris::Player::Properties::CanPlay>> can_play;
4986@@ -207,10 +201,7 @@
4987 } signals;
4988 };
4989
4990-media::PlayerStub::PlayerStub(
4991- const std::shared_ptr<Service>& parent,
4992- const std::shared_ptr<core::dbus::Object>& object)
4993- : d(new Private{parent, object})
4994+media::PlayerStub::PlayerStub(const media::PlayerStub::Configuration& config) : d(new Private{config})
4995 {
4996 }
4997
4998@@ -224,19 +215,19 @@
4999 {
5000 d->track_list = std::make_shared<media::TrackListStub>(
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches