From: <ra...@us...> - 2009-04-10 14:44:42
|
Revision: 3274 http://kdenlive.svn.sourceforge.net/kdenlive/?rev=3274&view=rev Author: rayll Date: 2009-04-10 14:44:20 +0000 (Fri, 10 Apr 2009) Log Message: ----------- [valgrind] unfixed memleak Signed-off-by: Ray Lehtiniemi <ra...@ma...> Modified Paths: -------------- trunk/kdenlive/src/kthumb.cpp trunk/kdenlive/src/renderer.cpp Modified: trunk/kdenlive/src/kthumb.cpp =================================================================== --- trunk/kdenlive/src/kthumb.cpp 2009-04-10 14:43:43 UTC (rev 3273) +++ trunk/kdenlive/src/kthumb.cpp 2009-04-10 14:44:20 UTC (rev 3274) @@ -146,6 +146,8 @@ void KThumb::setProducer(Mlt::Producer *producer) { m_producer = producer; + // FIXME: the profile() call leaks an object, but trying to free + // it leads to a double-free in Profile::~Profile() m_dar = producer->profile()->dar(); } Modified: trunk/kdenlive/src/renderer.cpp =================================================================== --- trunk/kdenlive/src/renderer.cpp 2009-04-10 14:43:43 UTC (rev 3273) +++ trunk/kdenlive/src/renderer.cpp 2009-04-10 14:44:20 UTC (rev 3274) @@ -132,8 +132,11 @@ m_mltConsumer->set("resize", 1); m_mltConsumer->set("window_id", m_winid); m_mltConsumer->set("terminate_on_pause", 1); - m_mltConsumer->set("window_background", decodedString(KdenliveSettings::window_background().name())); + tmp = decodedString(KdenliveSettings::window_background().name()); + m_mltConsumer->set("window_background", tmp); + delete [] tmp; + // FIXME: the event object returned by the listen gets leaked... m_mltConsumer->listen("consumer-frame-show", this, (mlt_listener) consumer_frame_show); m_mltConsumer->set("rescale", "nearest"); @@ -523,6 +526,7 @@ if (producer == NULL || producer->is_blank() || !producer->is_valid()) { kDebug() << " / / / / / / / / ERROR / / / / // CANNOT LOAD PRODUCER: "; emit removeInvalidClip(clipId); + delete producer; return; } @@ -639,6 +643,7 @@ /*if (context->duration == AV_NOPTS_VALUE) { kDebug() << " / / / / / / / /ERROR / / / CLIP HAS UNKNOWN DURATION"; emit removeInvalidClip(clipId); + delete producer; return; }*/ // Get the video_index @@ -710,6 +715,7 @@ emit replyGetFileProperties(clipId, producer, filePropertyMap, metadataPropertyMap, replaceProducer); kDebug() << "REquested fuile info for: " << url.path(); if (frame) delete frame; + // FIXME: should delete this to avoid a leak... //if (producer) delete producer; } @@ -966,6 +972,7 @@ /* if (m_mltConsumer->start() == -1) { KMessageBox::error(qApp->activeWindow(), i18n("Could not create the video preview window.\nThere is something wrong with your Kdenlive install or your driver settings, please fix it.")); + delete m_mltConsumer; m_mltConsumer = NULL; } else { @@ -1034,6 +1041,7 @@ kDebug() << "----- MONITOR: " << m_name << " WAS STOPPED"; if (m_mltConsumer->start() == -1) { KMessageBox::error(qApp->activeWindow(), i18n("Could not create the video preview window.\nThere is something wrong with your Kdenlive install or your driver settings, please fix it.")); + delete m_mltConsumer; m_mltConsumer = NULL; return; } else { @@ -2860,18 +2868,22 @@ int trackNb = tractor.count(); for (int t = 1; t < trackNb; t++) { - Mlt::Producer trackProducer(tractor.track(t)); + Mlt::Producer *tt = tractor.track(t); + Mlt::Producer trackProducer(tt); + delete tt; Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); int clipNb = trackPlaylist.count(); //kDebug() << "// PARSING SCENE TRACK: " << t << ", CLIPS: " << clipNb; for (int i = 0; i < clipNb; i++) { - Mlt::Producer *nprod = new Mlt::Producer(trackPlaylist.get_clip(i)->get_parent()); + Mlt::Producer *c = trackPlaylist.get_clip(i); + Mlt::Producer *nprod = new Mlt::Producer(c->get_parent()); if (nprod) { if (!nprod->is_blank() && !ids.contains(nprod->get("id"))) { ids.append(nprod->get("id")); prods.append(nprod); } else delete nprod; } + delete c; } } return prods; @@ -2886,11 +2898,14 @@ int trackNb = tractor.count(); for (int t = 1; t < trackNb; t++) { - Mlt::Producer trackProducer(tractor.track(t)); + Mlt::Producer *tt = tractor.track(t); + Mlt::Producer trackProducer(tt); + delete tt; Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service()); int clipNb = trackPlaylist.count(); for (int i = 0; i < clipNb; i++) { - Mlt::Producer *nprod = new Mlt::Producer(trackPlaylist.get_clip(i)->get_parent()); + Mlt::Producer *c = trackPlaylist.get_clip(i); + Mlt::Producer *nprod = new Mlt::Producer(c->get_parent()); if (nprod) { QString id = nprod->get("id"); if (id.startsWith("slowmotion:") && !nprod->is_blank()) { @@ -2901,6 +2916,7 @@ } } else delete nprod; } + delete c; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |