libsaria: Bugfix Track playlist list

I was sometimes trying to remove a playlist from an invalid pointer.

Signed-off-by: Bryan Schumaker <bjschuma@gmail.com>
This commit is contained in:
Bryan Schumaker 2012-05-19 20:32:08 -04:00
parent 057bce8809
commit ce6782558d
3 changed files with 11 additions and 3 deletions

View File

@ -27,8 +27,8 @@ namespace libsaria
{
length -= (*it)->get_length();
index.remove_track(*it);
it = plist.erase(it);
(*it)->rm_playlist(this);
it = plist.erase(it);
RENDER( remove_index(rm_index) );
if (rm_index != 0) {
rm_index--;

View File

@ -1,5 +1,6 @@
// Copyright (c) 2012 Bryan Schumaker.
#include <libsaria/index.h>
#include <libsaria/track.h>
#include <libsaria/library.h>
#include <libsaria/playlist.h>
#include <libsaria/renderer.h>
@ -49,6 +50,8 @@ namespace libsaria
void Playlist::prepare_for_removal()
{
list<libsaria::Track *>::iterator it;
/*
* I could do this in the destructor, but I think it could
* lead to double-free errors with static playlists
@ -60,6 +63,11 @@ namespace libsaria
renderer = NULL;
}
}
/* Remove playlist from tracks */
for (it = plist.begin(); it != plist.end(); it++)
(*it)->rm_playlist(this);
rm_file();
}

View File

@ -213,12 +213,12 @@ namespace libsaria
out << banned << "\n";
}
void Track::add_playlist(libsaria::Playlist *plist)
void Track::add_playlist(Playlist *plist)
{
playlists.push_back(plist);
}
void Track::rm_playlist(libsaria::Playlist *plist)
void Track::rm_playlist(Playlist *plist)
{
playlists.remove(plist);
}