Bug 102049 - Memory hole when streaming with gst engine
Summary: Memory hole when streaming with gst engine
Status: RESOLVED DUPLICATE of bug 102047
Alias: None
Product: amarok
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Debian testing Linux
: NOR normal
Target Milestone: ---
Assignee: Amarok Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-03-21 06:21 UTC by Christian Henz
Modified: 2006-06-11 12:32 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Christian Henz 2005-03-21 06:21:02 UTC
Version:            (using KDE KDE 3.3.2)
Installed from:    Debian testing/unstable Packages
Compiler:          gcc (GCC) 3.3.5 (Debian 1:3.3.5-12) 
OS:                Linux

When I'm using gstreamer and the stream starves/rebuffering occurs, amarok starts eating memory at a rate of >= 1MB/s. At this point also the GUI usually freezes while memory consumption keeps rising. 

I've reproduced this with 1.2.1 (from Debian), 1.2.2 (.debs from kalypso) and 1.2-CVS.

I've first noticed this problem after upgrading to libgstreamer 0.8.9 and libgstreamer-plugins 0.8.8.

The xine engine doesn't seem to have this problem.

To reproduce, I listen to an MP3 stream and then start a bandwidth hog like bittorrent. Also it happens when first connecting to a stream that is itself
flaky (last.fm).

I previously filed a report against gstreamer/Debian here:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=299931



Here is a log from a session where I started streaming from last.fm, got their 
'static' stream and started streaming again (this is when the gui stopped responding
and memory consumption went way up, so i killed amarokapp after 30 secs):

chrissi@homer:/home/chrissi$ amarok
amaroK: [Loader] Starting amarokapp..
amaroK: [Loader] Don't run gdb, valgrind, etc. against this binary! Use amarokapp.
amarok: BEGIN: App::App()
amarok:   BEGIN: EngineBase* EngineController::loadEngine(const QString&)
amarok:     [PluginManager] Plugin trader constraint: [X-KDE-amaroK-framework-version] == 5 and [X-KDE-amaroK-plugintype] == 'engine' and [X-KDE-amaroK-name] != 'void-engine' and [X-KDE-amaroK-rank] > 0
amarok:     [PluginManager] Plugin trader constraint: [X-KDE-amaroK-framework-version] == 5 and [X-KDE-amaroK-plugintype] == 'engine' and [X-KDE-amaroK-name] == 'void-engine' and [X-KDE-amaroK-rank] > 0
amarok:     [PluginManager] Trying to load: libamarok_void-engine_plugin
amarok:
amarok:     PluginManager Service Info:
amarok:     ---------------------------
amarok:     name                          : Kein Treiber
amarok:     library                       : libamarok_void-engine_plugin
amarok:     desktopEntryPath              : amarok_void-engine_plugin.desktop
amarok:     X-KDE-amaroK-plugintype       : engine
amarok:     X-KDE-amaroK-name             : void-engine
amarok:     X-KDE-amaroK-authors          : (Max Howell,Mark Kretschmann)
amarok:     X-KDE-amaroK-rank             : 1
amarok:     X-KDE-amaroK-version          : 1
amarok:     X-KDE-amaroK-framework-version: 5
amarok:
QObject::connect: Cannot connect Engine::Base::statusText( const QString& ) to (null)::shortMessage( const QString& )
QObject::connect: Cannot connect Engine::Base::infoMessage( const QString& ) to (null)::longMessage( const QString& )
amarok:   END__: EngineBase* EngineController::loadEngine(const QString&) - Took 0.03s
amarok:   BEGIN: CollectionDB::CollectionDB()
amarok:     [CollectionDB] Available db connections: 1
amarok:     [CollectionDB] Available db connections: 5
amarok:   END__: CollectionDB::CollectionDB() - Took 0.05s
QLayout: Adding KToolBar/mainToolBar (child of QVBox/unnamed) to layout for PlaylistWindow/PlaylistWindow
amarok:   Creating browsers. Please report long start times!
amarok:     BEGIN: ContextBrowser
amarok:       [void ContextBrowser::setStyleSheet()]
amarok:       BEGIN: amaroK::Color::Color(const QColor&)
amarok:         [ContextBrowser] Initial Color Properties: s:137 v:255
amarok:         [ContextBrowser] Unapplied Contrast: 23
amarok:         [ContextBrowser] Over-compensation: 23
amarok:         [ContextBrowser] Final Colour Properties: s:30 v:255
amarok:       END__: amaroK::Color::Color(const QColor&) - Took 0s
amarok:     END__: ContextBrowser - Took 0.11s
amarok:     BEGIN: CollectionBrowser
amarok:       [CollectionView::CollectionView(CollectionBrowser*)]
amarok:       [void CollectionView::renderView()]
amarok:     END__: CollectionBrowser - Took 0.3s
amarok:     BEGIN: PlaylistBrowser
amarok:     END__: PlaylistBrowser - Took 0.48s
amarok:     BEGIN: MediaBrowser
amarok:     END__: MediaBrowser - Took 0.03s
amarok:     BEGIN: FileBrowser
amarok:       [StatusBar] KSqueezedTextLabel, mainTextLabel: 18: 0
amarok:       [StatusBar] QHBox, progressBox: 26: 0
amarok:       [StatusBar] QLabel, unnamed: 18: 0
amarok:       [StatusBar] QWidget, positionBox: 26: 0
amarok:       [StatusBar] QWidget, unnamed: 16: 0
amarok:     END__: FileBrowser - Took 0.06s
amarok:   BEGIN: UrlLoader
amarok:     BEGIN: UrlLoader::UrlLoader(const KURL::List&, QListViewItem*, bool)
amarok:       [KDE::ProgressBar::ProgressBar(QWidget*, QLabel*)]
amarok:       [StatusBar] Creating timer for: 1updateProgressAppearance()
amarok:     END__: UrlLoader::UrlLoader(const KURL::List&, QListViewItem*, bool) - Took 0.01s
amarok:     BEGIN: void App::applySettings(bool)
amarok:       BEGIN: void App::applyColorScheme()
amarok:       END__: void App::applyColorScheme() - Took 0s
amarok:       [void ContextBrowser::setStyleSheet()]
amarok:       BEGIN: amaroK::Color::Color(const QColor&)
amarok:         [ContextBrowser] Initial Color Properties: s:137 v:255
amarok:         [ContextBrowser] Unapplied Contrast: 23
amarok:         [ContextBrowser] Over-compensation: 23
amarok:         [ContextBrowser] Final Colour Properties: s:30 v:255
amarok:       END__: amaroK::Color::Color(const QColor&) - Took 0s
amarok:       [Scrobbler] Handshake url: http://post.audioscrobbler.com/?hs=true&p=1.1&c=ark&v=0.1&u=henzenmann
amarok:       [virtual bool BrowserBar::event(QEvent*)] Line: 182
amarok:       [virtual void BrowserBar::polish()]
amarok:       BEGIN: void ContextBrowser::showHome()
amarok:       END__: void ContextBrowser::showHome() - Took 0.84s
amarok:       [BlockAnalyzer] FallTime: 300
amarok:       [BlockAnalyzer] FallTime: 360
amarok:       [ThreadWeaver] Job completed: PlaylistReader. Jobs pending: 0
amarok:       [ThreadWeaver] Job completed: UrlLoader. Jobs pending: 0
amarok:     END__: UrlLoader - Took 1.02s
amarok:     [StatusBar] Creating timer for: 1hideMainProgressBar()
amarok:     [StatusBar] 1updateProgressAppearance()
amarok:     BEGIN: EngineBase* EngineController::loadEngine()
amarok:       BEGIN: EngineBase* EngineController::loadEngine(const QString&)
amarok:         [PluginManager] Plugin trader constraint: [X-KDE-amaroK-framework-version] == 5 and [X-KDE-amaroK-plugintype] == 'engine' and [X-KDE-amaroK-name] != 'gst-engine' and [X-KDE-amaroK-rank] > 0
amarok:         [PluginManager] Plugin trader constraint: [X-KDE-amaroK-framework-version] == 5 and [X-KDE-amaroK-plugintype] == 'engine' and [X-KDE-amaroK-name] == 'gst-engine' and [X-KDE-amaroK-rank] > 0
amarok:         [PluginManager] Trying to load: libamarok_gstengine_plugin
amarok: [GstEngine::GstEngine()]
amarok:
amarok:         PluginManager Service Info:
amarok:         ---------------------------
amarok:         name                          : Gstreamer-Treiber
amarok:         library                       : libamarok_gstengine_plugin
amarok:         desktopEntryPath              : amarok_gstengine_plugin.desktop
amarok:         X-KDE-amaroK-plugintype       : engine
amarok:         X-KDE-amaroK-name             : gst-engine
amarok:         X-KDE-amaroK-authors          : (Mark Kretschmann)
amarok:         X-KDE-amaroK-rank             : 255
amarok:         X-KDE-amaroK-version          : 1
amarok:         X-KDE-amaroK-framework-version: 5
amarok:
amarok: BEGIN: virtual bool GstEngine::init()
amarok:   BEGIN: bool GstEngine::createPipeline()
amarok:     [Gst-Engine] Thread scheduling priority: 2
amarok:     [Gst-Engine] Sound output method: alsasink
amarok:     [Gst-Engine] CustomSoundDevice: false
amarok:     [Gst-Engine] Sound Device:
amarok:     [Gst-Engine] CustomOutputParams: false
amarok:     [Gst-Engine] Output Params:
amarok: [void gst_equalizer_base_init(void*)]
amarok: [void gst_equalizer_class_init(GstEqualizerClass*)]
amarok: [void gst_equalizer_init(GstEqualizer*)]
amarok: [GstPadLinkReturn gst_equalizer_link(GstPad*, const GstCaps*)]
amarok:   END__: bool GstEngine::createPipeline() - Took 0.29s
amarok: END__: virtual bool GstEngine::init() - Took 0.66s
amarok:       END__: EngineBase* EngineController::loadEngine(const QString&) - Took 0.68s
amarok:     END__: EngineBase* EngineController::loadEngine() - Took 0.68s
amarok:     [void CollectionView::renderView()]
amarok:   END__: void App::applySettings(bool) - Took 2.12s
chrissi@homer:/home/chrissi$ amarok: END__: App::App() - Took 3.54s
amarok: [virtual KDE::ProgressBar::~ProgressBar()]
amarok: [StatusBar] 1hideMainProgressBar()
amarok: [static void GstEngine::candecode_handoff_cb(GstElement*, GstBuffer*, void*)]
amarok: [static void GstEngine::candecode_handoff_cb(GstElement*, GstBuffer*, void*)]
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: WARNING: Pixmap not found for mimetype audio/wav
amarok: [Scrobbler] Handshake result parsed: challenge=CDC11C792F34EE4CF0D38A8CC0D1509B, submitUrl=http://post.audioscrobbler.com:80/protocol_1.1
amarok: BEGIN: virtual void amaroK::DcopPlayerHandler::transferCliArgs(QStringList)
amarok:   Startup ID:
amarok:   Extracted: -a
amarok:   Extracted: /tmp/playlist-18.m3u
amarok:   BEGIN: UrlLoader
amarok:     BEGIN: UrlLoader::UrlLoader(const KURL::List&, QListViewItem*, bool)
amarok:       [KDE::ProgressBar::ProgressBar(QWidget*, QLabel*)]
amarok:     END__: UrlLoader::UrlLoader(const KURL::List&, QListViewItem*, bool) - Took 0s
amarok:   END__: virtual void amaroK::DcopPlayerHandler::transferCliArgs(QStringList) - Took 0.04s
amarok:   [StatusBar] 1updateProgressAppearance()
amarok:   [ThreadWeaver] Job completed: UrlLoader. Jobs pending: 0
amarok: END__: UrlLoader - Took 0.05s
amarok: [virtual KDE::ProgressBar::~ProgressBar()]
amarok: [StatusBar] 1hideMainProgressBar()
amarok: [controller] Loading URL: http://moses.last.fm/last.mp3?Session=7d0dc0e92afa550a0637a8a1bafb41ec
amarok: [StatusBar] Creating timer for: 1resetMainText()
amarok: [controller] Detected mimetype: audio/x-mp3
amarok: BEGIN: amaroK::StreamProvider::StreamProvider(KURL, const QString&)
amarok:   BEGIN: void amaroK::StreamProvider::connectToHost()
amarok:   END__: void amaroK::StreamProvider::connectToHost() - Took 0.01s
amarok: END__: amaroK::StreamProvider::StreamProvider(KURL, const QString&) - Took 0.01s
amarok: BEGIN: virtual bool GstEngine::load(const KURL&, bool)
amarok:   [Gst-Engine] Loading url: http://127.0.0.1
amarok:   BEGIN: InputPipeline::InputPipeline()
amarok:   END__: InputPipeline::InputPipeline() - Took 0.02s
amarok: [void gst_streamsrc_base_init(void*)]
amarok: [void gst_streamsrc_class_init(GstStreamSrcClass*)]
amarok: [void gst_streamsrc_init(GstStreamSrc*)]
amarok: END__: virtual bool GstEngine::load(const KURL&, bool) - Took 0.1s
amarok: BEGIN: virtual bool GstEngine::play(unsigned int)
amarok: BEGIN: void EngineSubject::stateChangedNotify(Engine::State)
amarok:   [virtual void amaroK::StatusBar::engineStateChanged(Engine::State)] Line: 123
amarok:   BEGIN: virtual void ContextBrowser::engineStateChanged(Engine::State)
amarok:   END__: virtual void ContextBrowser::engineStateChanged(Engine::State) - Took 0s
amarok: END__: void EngineSubject::stateChangedNotify(Engine::State) - Took 0.02s
amarok: END__: virtual bool GstEngine::play(unsigned int) - Took 0.04s
QObject::connect: No such signal EngineController::orderNext()
QObject::connect:  (sender name:   'unnamed')
QObject::connect:  (receiver name: 'unnamed')
amarok: BEGIN: void EngineSubject::newMetaDataNotify(const MetaBundle&, bool)
amarok:   [296x48]
amarok:   7
amarok:   45
amarok: END__: void EngineSubject::newMetaDataNotify(const MetaBundle&, bool) - Took 0.05s
amarok: [Gst-Engine] Fade-in finished.
amarok: BEGIN: virtual bool CurrentTrackJob::doJob()
amarok: END__: virtual bool CurrentTrackJob::doJob() - Took 0s
amarok: [ThreadWeaver] Job completed: CurrentTrackJob. Jobs pending: 0
amarok: BEGIN: void amaroK::StreamProvider::sendRequest()
amarok:   [StreamProvider] Sending request:
amarok: GET /last.mp3?Session=7d0dc0e92afa550a0637a8a1bafb41ec HTTP/1.0
Host: moses.last.fm
User-Agent: amaroK/1.2
Accept: */*
Icy-MetaData:1

amarok:
amarok: END__: void amaroK::StreamProvider::sendRequest() - Took 0s
amarok: BEGIN: bool amaroK::StreamProvider::processHeader(Q_LONG&, long int)
amarok:   [StreamProvider] Got shoutcast header: 'ICY 200 OK
Server: lastserver
Content-Type: audio/mpeg
x-audiocast-location: Vienna AU
x-audiocast-server-url: http://www.last.fm
x-audiocast-name: Last.fm
x-audiocast-description:n/a
x-audiocast-url: http://www.last.fm
 x-audiocast-genre: n/a
 x-audiocast-bitrate: 128
 x-audiocast-public: 1

amarok: '
amarok:   [StreamProvider] Stream does not support Shoutcast Icy-MetaData. Restarting in non-Metadata mode.
amarok:   BEGIN: void amaroK::StreamProvider::connectToHost()
amarok:   END__: void amaroK::StreamProvider::connectToHost() - Took 0s
amarok: END__: bool amaroK::StreamProvider::processHeader(Q_LONG&, long int) - Took 0s
amarok: BEGIN: void amaroK::StreamProvider::sendRequest()
amarok:   [StreamProvider] Sending request:
amarok: GET /last.mp3?Session=7d0dc0e92afa550a0637a8a1bafb41ec HTTP/1.0
Host: moses.last.fm
User-Agent: amaroK/1.2
Accept: */*

amarok:
amarok: END__: void amaroK::StreamProvider::sendRequest() - Took 0s
amarok: BEGIN: bool amaroK::StreamProvider::processHeader(Q_LONG&, long int)
amarok:   [StreamProvider] Got shoutcast header: 'HTTP/1.1 200 OK
Date: Mon Mar 21 06:20:21 GMT 2005
Server: Last.fm
Connection: Keep-Alive
Cache-control: no-cache
Accept-Ranges: bytes
Content-Type: audio/mpeg

amarok: '
amarok:   BEGIN: void amaroK::StreamProvider::transmitData(const QString&)
amarok:     [StreamProvider] Received MetaData:
amarok:     BEGIN: void EngineSubject::newMetaDataNotify(const MetaBundle&, bool)
amarok:       [96x48]
amarok:       22
amarok:       45
amarok:     END__: void EngineSubject::newMetaDataNotify(const MetaBundle&, bool) - Took 0.03s
amarok:   END__: void amaroK::StreamProvider::transmitData(const QString&) - Took 0.03s
amarok: END__: bool amaroK::StreamProvider::processHeader(Q_LONG&, long int) - Took 0.03s
amarok: BEGIN: virtual bool CurrentTrackJob::doJob()
amarok: END__: virtual bool CurrentTrackJob::doJob() - Took 0s
amarok: [ThreadWeaver] Job completed: CurrentTrackJob. Jobs pending: 0
amarok: [StatusBar] 1resetMainText()
amarok: [StreamSrc] Buffer underflow. Rebuffering.
amarok: BEGIN: static void GstEngine::newPad_cb(GstElement*, GstPad*, int, InputPipeline*)

(process:8793): GStreamer-WARNING **: pads don't accept old caps. We assume they did though

(process:8793): GStreamer-WARNING **: pads don't accept old caps. We assume they did though
amarok: END__: static void GstEngine::newPad_cb(GstElement*, GstPad*, int, InputPipeline*) - Took 0.24s
amarok: BEGIN: static void GstEngine::found_tag_cb(GstElement*, GstElement*, GstTagList*, void*)
amarok: END__: static void GstEngine::found_tag_cb(GstElement*, GstElement*, GstTagList*, void*) - Took 0s
amarok: [StatusBar] 1resetMainText()
amarok: [ThreadWeaver] Job aborted: CollectionReader. Jobs pending: 0
amarok: BEGIN: virtual void amaroK::DcopPlayerHandler::transferCliArgs(QStringList)
amarok:   Startup ID:
amarok:   Extracted: -a
amarok:   Extracted: /tmp/playlist-19.m3u
amarok:   BEGIN: UrlLoader
amarok:     BEGIN: UrlLoader::UrlLoader(const KURL::List&, QListViewItem*, bool)
amarok:       [KDE::ProgressBar::ProgressBar(QWidget*, QLabel*)]
amarok:     END__: UrlLoader::UrlLoader(const KURL::List&, QListViewItem*, bool) - Took 0s
amarok:   END__: virtual void amaroK::DcopPlayerHandler::transferCliArgs(QStringList) - Took 0.04s
amarok:   [StatusBar] 1updateProgressAppearance()
amarok:   [ThreadWeaver] Job completed: UrlLoader. Jobs pending: 0
amarok: END__: UrlLoader - Took 0.11s
amarok: [controller] Loading URL: http://moses.last.fm/last.mp3?Session=7d0dc0e92afa550a0637a8a1bafb41ec
amarok: [virtual amaroK::StreamProvider::~StreamProvider()]
amarok: [virtual KDE::ProgressBar::~ProgressBar()]
amarok: [StatusBar] 1hideMainProgressBar()
amarok: [controller] Detected mimetype: audio/x-mp3
amarok: BEGIN: amaroK::StreamProvider::StreamProvider(KURL, const QString&)
amarok:   BEGIN: void amaroK::StreamProvider::connectToHost()
amarok:   END__: void amaroK::StreamProvider::connectToHost() - Took 0.01s
amarok: END__: amaroK::StreamProvider::StreamProvider(KURL, const QString&) - Took 0.01s
amarok: BEGIN: virtual bool GstEngine::load(const KURL&, bool)
amarok:   [Gst-Engine] Loading url: http://127.0.0.1
amarok:   BEGIN: InputPipeline::InputPipeline()
amarok:   END__: InputPipeline::InputPipeline() - Took 0s
amarok: [void gst_streamsrc_init(GstStreamSrc*)]
amarok: END__: virtual bool GstEngine::load(const KURL&, bool) - Took 0.08s
amarok: BEGIN: virtual bool GstEngine::play(unsigned int)
amarok: BEGIN: void EngineSubject::stateChangedNotify(Engine::State)
amarok:   [virtual void amaroK::StatusBar::engineStateChanged(Engine::State)] Line: 123
amarok:   BEGIN: virtual void ContextBrowser::engineStateChanged(Engine::State)
amarok:   END__: virtual void ContextBrowser::engineStateChanged(Engine::State) - Took 0s
amarok: END__: void EngineSubject::stateChangedNotify(Engine::State) - Took 0.02s
amarok: END__: virtual bool GstEngine::play(unsigned int) - Took 0.15s
QObject::connect: No such signal EngineController::orderNext()
QObject::connect:  (sender name:   'unnamed')
QObject::connect:  (receiver name: 'unnamed')
amarok: BEGIN: void EngineSubject::newMetaDataNotify(const MetaBundle&, bool)
amarok:   [296x48]
amarok:   7
amarok:   45
amarok: END__: void EngineSubject::newMetaDataNotify(const MetaBundle&, bool) - Took 0.07s
amarok: BEGIN: void amaroK::StreamProvider::sendRequest()
amarok:   [StreamProvider] Sending request:
amarok: GET /last.mp3?Session=7d0dc0e92afa550a0637a8a1bafb41ec HTTP/1.0
Host: moses.last.fm
User-Agent: amaroK/1.2
Accept: */*
Icy-MetaData:1

amarok:
amarok: END__: void amaroK::StreamProvider::sendRequest() - Took 0s
amarok: [Gst-Engine] XFade-in finished.
amarok: BEGIN: void GstEngine::destroyInput(InputPipeline*)
amarok:   [Gst-Engine] Destroying input pipeline.
amarok:   BEGIN: InputPipeline::~InputPipeline()
amarok:     [Gst-Engine] Destroying input bin.
amarok: BEGIN: virtual bool CurrentTrackJob::doJob()
amarok: END__: virtual bool CurrentTrackJob::doJob() - Took 0s
Comment 1 Leo Franchi 2005-03-21 06:27:20 UTC
from what you describe, it sounds very similar to bug #102047.

i would say its a dup, but i don't have the priviledge and the  knowledge of how to do that in bugzilla.
Comment 2 Ian Monroe 2005-03-21 08:13:22 UTC
Leo is correct.

*** This bug has been marked as a duplicate of 102047 ***